在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。

在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

结构图

设计模式结构性:代理模式(ProxyPattern)_java

角色与理解

  • 代理模式共分为四种角色:

    • Subject(抽象主题角色):真实主题角色与代理主题角色的共同父类,可以是具体类、抽象类、接口,客户端针对抽象主题角色编程

    • RealSubject(真实主题角色):实现具体业务方法的类,被代理主题角色调用

    • Proxy(代理主题角色):持有真实主题角色的引用,在调用真实主题角色的具体业务方法之前或者之后添加其它操作

  • 客户端面对抽象主题角色编程,调用抽象主题角色实际上调用的是代理主题角色,代理主题角色调用的是真实主题角色的方法,并在调用真实主题角色之前或者之后添加其他操作


核心代码

  • 抽象主题角色

设计模式结构性:代理模式(ProxyPattern)_java_02

  • 真实主题角色

  • 代理主题角色

设计模式结构性:代理模式(ProxyPattern)_java_03

  • 客户端

设计模式结构性:代理模式(ProxyPattern)_java_04