一、概念:代理模式为其他对象提供一种代理以控制对这个对象的访问。(在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。)
二、UML示意图:
Subject类是一个抽象类,里面有抽象方法Operation(),RealSubject继承Subject类并实现Operation()方法,但有时候程序员可能会想要调用这个Operation()之前做一些权限控制,或者说预处理,这时候可以用同样继承于Subject类的Proxy类,Proxy对象内部会有一个RealSubject对象,当调用Operation()方法时Proxy对象会调用这个RealSubject对象的Operation()方法,并在调用它之前或者之后做一些程序员想要做的额外任务。
三、优缺点
优点:
- 职责清晰。真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。降低了耦合度。
- 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
- Client可以针对Subject类进行编程,无需关心用了哪个Proxy类或者是RealSubject类,当需要增加新的Proxy类或者更换另一个Proxy类时,无需更改原代码,符合开闭原则。
缺点:
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。
- 实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂,例如远程代理。
来源:https://www.cnblogs.com/winsons/p/12490347.html