定义:
给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问。代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用。例如:安全代理、缓冲代理、远程代理等。
结构图:
- Subject:抽象主题类,定义了真实主题和代理类的共同接口,客户端根据该抽象接口进行编程,对代理类的内部实现不需要关心。
- RealSubject:真实主题类,实现了真正的业务操作,但因为一些原因不能或不允许客户端直接访问。
- Proxy:代理主题类,包含了对真实主题的引用,当调用真实主题的操作时,需要加上特定的预处理或者其它附加操作,以约束或限制真实主题的业务操作,达到控制和优化的作用。
代理模式和装饰者模式的区别
代理模式和装饰者模式的结构图十分相似,但两者的侧重点不一样。
- 装饰者模式又被称作“Smart Proxy”,其主要功能是动态添加功能,不关心具体被添加功能者是谁。
- 代理模式的主要功能是对被代理类进行控制和约束,不能动态地添加功能,这些功能一般都是限定好的。
常见代理模式
- 远程代理:使得客户端可以访问远程主机上的对象,远程主机上的对象可能有更良好的性能和处理速度,并且可以向客户隐藏网络细节,有代理对象来处理网络连接和通信工作。
- 虚拟代理:对于一些加载时间比较长或者占用系统资源比较多的对象,可以创建虚拟对象来先行处理与客户端的交互,再有虚拟代理转发对应的请求给真实的对象。
- 缓冲代理:对于一些操作频繁,而且每次操作消耗比较大的对象可以代用缓冲代理的方式,建立临时的缓冲空间,统一进行批量处理。
优点:
- 对实际访问的对象进行控制,并添加了额外功能,并向客户隐藏了实现细节。
- 符合开闭原则,通过不用的代理器可以实现不同的功能,提高系统的可扩展性。
- 不同的代理方式有着不同的优秀特性。