我对代理模式的理解

我在学校迎新晚会上见到一个跳舞的女生,第一眼就想把她占为己有,可是我与她素不相识,只能找其他同学偷偷要来她的联系方式。这就是代理模式

概念

我们来看一下head first设计模式里是怎么定义代理模式的:代理模式为另一个对象提供一个替身或占位符以控制这个对象的访问。使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。

如何实现

拿我追女生的例子来说,我就是委托对象,那个认识她的同学就是代理,我让他去帮我要电话,本质上是我在要电话,最后的结果也是我要到了电话,而事实上却是他找她要的电话。对于代理模式的调用者来说,是我在要电话而并不关注要电话的那个代理,这里大家肯定觉得很熟悉,没错,我们采用了面向接口编程的思想,调用者只需要使用接口中的方法,不用在乎具体的实现类。
因此,我们可以先创建一个委托接口,接口中有一个要电话的抽象方法。然后写一个‘我’对象继承自这个接口,实现要电话的方法;再写一个代理类同样实现这个委托接口,在这个代理类中注入‘我’的实例,调用‘我’中的方法去实现接口方法。总结为一张图:

代码实现

定义委托接口

public interface Subject{
    void getCall();
}

定义‘我’

public class Me implements Subject{
    @Override
    public void getCall() {
        // TODO Auto-generated method stub
        System.out.println("我想要你的电话");
    }

}

定义代理

public class Proxy implements Subject{
    private Subject subject;
    public Proxy(Subject subject) {
        // TODO Auto-generated constructor stub
        this.subject = subject;
    }
    @Override
    public void getCall() {
        // TODO Auto-generated method stub
        subject.getCall();
    }
}

测试

public class ProxyTest {
    public static void main(String[] args) {
        Me me = new Me();
        Subject proxy = new Proxy(me);
        proxy.getCall();
    }
}

输出结果:

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值