持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情
这篇文章我们讲代理模式。代理模式顾名思义,我们就是要通过代码,在面向对象的语言中实现“代理”的功能。
代理模式的概念
代理模式本身也是一种结构型设计模式。简单来说,它的作用就是为其他对象提供一个代理,使用这个代理以控制对这个对象的访问。
代理模式就是提供对象的替代品,当一个客户端不能直接引用一个对象的时候,代理对象就可以在客户端和目标对象之间起到中介的作用。
这个代理控制着对于原对象的访问,同时可以在将请求提交给对象前后进行一些额外附加的处理。
代理模式分为三个角色:
- 抽象角色(Subject):用来声明真实对象和代理对象的共同接口
- 代理角色(Proxy):代理对象角色内部含有真实对象的引用,这样就可以操作真实对象;同时代理对象提供与真实对象相同的接口,以便在任何时刻都能代替真实对象(这样一来,对客户端来说真实对象就是一个透明的存在)。同时,代理对象可以在执行真实对象操作的前后,附加一些其他操作,相当于对真实对象进行封装。
- 真实角色(Real Subject):代理角色所代表的真实对象,也是是我们最终要引用的对象。
代理模式的类图如下:
客户端调用Subject 接口,但是Subject 接口被Proxy 和RealSubject 实现。同时Proxy 中会使用RealSubject 作为其成员变量。
通过类图和文字描述,相信大家对代理模式的结构也会有了一个比较清晰的认知了。
总结
这篇文章内容比较精炼,主要就是为了说明代理模式的概念以及代理模式的结构,希望读者可以好好理解代理模式的运行流程,接下来的文章会继续介绍代理模式的实现步骤,以及用实际的场景来对代理模式进行分析。