我对代理模式的理解

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

概念

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

如何实现

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


代码实现

定义委托接口

public interface Subject{
    void getCall();
}

定义‘我’

public class Me implements Subject{
    @Override
    public void getCall() {
        System.out.println("我想要你的电话");
    }

}

定义代理

public class Proxy implements Subject{
    private Subject subject;
    public Proxy(Subject subject) {
        this.subject = subject;
    }
    @Override
    public void getCall() {
        subject.getCall();
    }
}

测试

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

输出结果:

image.png

代理模式的好处

代理模式的优势在于当你需要添加或修改新的业务功能 ,不需要修改原来的代码,即上述代码中的Me类,而是通过添加新的类来代理之前的逻辑,这也是所有设计模式的基本原则:可以加,不能改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,986评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,982评论 1 15
  • 如果说,我们是为公中国最幸福先锋小队,没有之一! 那么,为公中国就是中国乃至全世界最幸福先锋小队,没有之一! 队长...
    阳光Sunflower阅读 348评论 0 3
  • 风雨缥缈数千里, 风因海马雨因溺。 趾步赣境成洪滞, 似看今下是寒冬
    小肥肉_aa92阅读 145评论 0 2