(六)代理模式-代码实现

概念:为其他对象提供一种代理以控制对这个对象的访问。

使用场景:增加一个对象操作的访问控制,如根据权限判断用户是否能执行某个方法. 另一个应用是延迟加载,比如图片的对象,直到真正改变图片文件时才真正加载.

一个带访问控制的代理例子:

//真正的执行对象

package note.com.proxy;

/**
 * 可执行动作
 * @author lxz
 *
 */
public class Action {

    public void doOne(){
        System.out.println("One");
    }
    public void doTwo(){
        System.out.println("Two");
    }
    public void doThree(){
        System.out.println("Three");
    }

}

//权限控制类

package note.com.proxy;

/**
 * 权限类
 *
 * @author lxz
 *
 */
public class Permission {

    private boolean one = false;
    private boolean two = false;
    private boolean three = false;

    public Permission(boolean one,boolean two,boolean three){
        this.one = one;
        this.two = two;
        this.three = three;
    }

    public boolean isOne() {
        return one;
    }
    public void setOne(boolean one) {
        this.one = one;
    }
    public boolean isTwo() {
        return two;
    }
    public void setTwo(boolean two) {
        this.two = two;
    }
    public boolean isThree() {
        return three;
    }
    public void setThree(boolean three) {
        this.three = three;
    }

}

//对Action的代理类

package note.com.proxy;

/**
 * 代理Action类
 * @author lxz
 *
 */
public class Proxy {

    private Action action = null;
    private Permission permission = null;

    public Proxy(Permission permission){
        this.action = new Action();
        this.permission = permission;
    }

    public void doOne(){
        if(permission.isOne()){
            action.doOne();
        }
    }
    public void doTwo(){
        if(permission.isTwo()){
            action.doTwo();
        }
    }
    public void doThree(){
        if(permission.isThree()){
            action.doThree();
        }
    }
    public Action getAction() {
        return action;
    }
    public void setAction(Action action) {
        this.action = action;
    }
    public Permission getPermission() {
        return permission;
    }
    public void setPermission(Permission permission) {
        this.permission = permission;
    }

}

//测试类

package note.com.proxy;

public class ProxyTest {
    public static void main(String[] args) {
        Permission permission = new Permission(true,false,true);
        Proxy proxy = new Proxy(permission);
        proxy.doOne();
        proxy.doTwo();
        proxy.doThree();
    }
}

结果:

One
Three

真正的对象由代理对象去掉用,并且在代理对象中增加的访问控制

时间: 2024-10-25 21:49:21

(六)代理模式-代码实现的相关文章

静态代理模式代码演示

一.静态代理:增强行为1.真实角色2.代理角色+真实角色的引用3.代理行为要求实现相同的接口 1.接口,租赁行为 1 package com.wisezone.dailies; 2 3 /** 4 * 接口,租赁行为 5 * @author 王东海 6 * @2017年4月16日 7 */ 8 public interface Rent 9 { 10 /** 11 * 租赁 12 * void 13 */ 14 public void rent(); 15 } 2.真实角色类 1 package

《大话设计模式》ruby版代码:代理模式

需求: 小明让小李替他追小丽(送洋娃娃,送花,送巧克力) 没有代理的代码: # -*- encoding: utf-8 -*- #追求者类 class Pursuit attr_accessor :mm def initialize(mm) @mm = mm end def give_dolls puts "#{mm.name} 送你洋娃娃" end def give_flowers puts "#{mm.name} 送你鲜花" end def give_choco

装饰模式与代理模式的区别

以下是我的理解: 代码区别: 装饰模式跟代理模式代码的最大的在于他们的构造方法,代理模式的构造方法不传参数,在构造方法内部完成参数传递,装饰模式将装饰的对象作为参数传进去. 理念区别: 代理模式中,代理类对被代理的对象有控制权,决定其执行或者不执行.而装饰模式中,装饰类对代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能   学习AOP时,教材上面都说使用的是动态代理,可是在印象中代理模式一直都是控制访问什么的,怎么又动态增加行为了,动态增加行为不是装饰器模式吗?于是 找了很多资料

JavaScript设计模式之代理模式

一.代理模式概念 代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问.代理模式使得代理对象控制具体对象的引用.代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西. 解释:房屋中介,可以代理帮助卖家把房子卖给买家,这中间卖家说要卖的价钱就可以了,买家也可以提出自己要买的房型,中介可以帮忙处理中间环节.最后达成买卖.中介可以同时代理很多房屋买卖,并且可以代理租房事宜. 二.代理模式的作用和注意事项

设计模式:代理模式与装饰模式

1.装饰者模式与代理模式 (静态代理) 在日常开发里面,我们经常需要给某个类的方法增加加某些特定的功能. 例如:有婴儿,婴儿会吃饭和走动,如以下类 1 package com.scl.designpattern.proxy; 2 3 //婴儿类 4 public class Child implements Human 5 { 6 public void eat() 7 { 8 System.out.println("eat something...."); 9 } 10 11 @Ov

JAVA基础(一)——代理模式

实现java代理一般分为静态代理和动态代理(jdk代理和cglib代理) 代理模式 简单的说就是对原有的业务进行代理,外界通过代理访问真实对象,代理类似现在的中介机构,房产中介就是一个代理,代理房东,租户只要找到代理而无须关心房东是谁,代理能在房东的基础上增强房东的行为. 代理模式代码 JAVA静态代理 业务接口 package com.rrg.proxy.jdk.staticProxy; /** * * @author abc * */ public interface Count { /**

详解 Java 中的三种代理模式

代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.      这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法.      举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎

详解 Java 中的三种代理模式!

作者:岑宇 https://www.cnblogs.com/cenyu/p/6289209.html 代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法. 举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的

设计模式(六)代理模式

--核心作用:通过代理,控制对对象的访问,可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,从而实现将统一流程代码放到代理类中处理,调用这个方法后做后置处理. --AOP(Aspect Oriented Programming面向切面编程)的核心实现机制 --核心角色: 抽象角色:定义代理角色和真实角色的公共对外方法. 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用. 关注真正的业务逻辑. 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑