java设计模式之代理模式:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java设计模式之代理模式:相关的知识,希望对你有一定的参考价值。

以上是对代理模式的概述:
 抽象角色:声明真实对象和代理对象的共同接口。
  代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象        可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
  真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

关于代理角色那句我又疑问:真是对象实现了的接口,代理对象为什么也要实现呢?代理对象的类中已经包含了真实对象的引用所以真实对象不就行了么?为啥也要实现那个接口呢?求指导

很简单:对外部提供统一的接口方法,而代理类在接口中实现对真实类的附加操作行为,从而可以在不影响外部调用情况下,进行系统扩展。也就是说,我要修改真实角色的操作的时候,尽量不要修改他,而是在外部在“包”一层进行附加行为,即代理类。

例如:接口A有一个接口方法operator(),真是角色:RealA实现接口A,则必须实现接口方法operator()。客户端Client调用接口A的接口方法operator()。
现在新需求来了,需要修改RealA中的operator()的操作行为。怎么办呢?如果修改RealA就会影响原有系统的稳定性,还要重新测试。这是就需要代理类实现附加行为操作。创建代理ProxyA实现接口A,并将真实对象RealA注入进来。ProxyA实现接口方法operator(),可以增加附加行为,然后调用真实对象的operator()。从而达到了“对修改关闭,对扩展开放”,保证了系统的稳定性。我们看客户端Client调用仍是接口A的接口方法operator(),只不过实例变为了ProxyA类了而已。
建议看看《软件秘笈:设计模式那点事》,当中讲解的很详细,例子也很生动,读了收获很大!希望以上内容对你有帮助!
参考技术A 汗... 尽然是代理对象,那么在实际传值的时候传的是代理对象啦。要不然就没什么意义了。然而以面向接口编程的思想来说,方法的参数应该是接口类型的才对。这样代理对象就必须实现和真实对象一样的接口啦。

java设计模式之代理模式()

代理模式(Proxy)

    代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或不能直接引用其他的对象,而代理对象可以在客户端和目标之间起

  到中介的模式。

    代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象和调用者之间插入一个代理对象,这些额外的操作通常是需要与实际对象进行通信

  代理模式包含以下角色:

    ISubject:抽象主题角色,是对象和他的代理公用的接口

    RealSubject:真是主题角色,是实现抽象主题接口的类

    Proxy:代理角色,内部含有对真是对象的引用,从而可以操作真是对象。代理对象和真实对象实现共同的接口以便可以随时替换真实对象。此外,代理对象在执行真实对象的时候可以附加其他的操作,相当于对真实对象进行了封装。动态代理实现的关键是反射

  静态代理    

      场景:房东想将房子租出去,又不想直接与租户接触,此时就需要中介来完成这个任务

      缺点:因为代理对象需要和目标对象实现同样的接口,所以会有很多的代理类,同时,一旦接口增加方法后目标对象和代理对象都需要维护

    抽象主题角色:

      技术分享

    真实主题角色(房东)

      技术分享

    代理角色

      技术分享

    测试类:

      技术分享

  动态代理

    优点

      1、减少代码量,当需要多种处理逻辑的时候只需要写多个代理类就可以了不用每中方法都写一个代理类

      2、系统扩展性和维护性增强,方便后续 程序的修改 

      

    动态代理类:

    技术分享

  测试类:

 技术分享 

 

 源码地址

以上是关于java设计模式之代理模式:的主要内容,如果未能解决你的问题,请参考以下文章

Java 之 设计模式——代理模式

java代码实现设计模式之代理模式

Java设计模式之代理模式

设计模式之代理模式详解(java)

设计模式之代理模式详解(java)

java设计模式之代理模式