设计模式探秘-9-代理模式

代理模式的学习与实践

模板方法模式

代理模式(委托模式):为其他对象提供一个代理以控制对这个对象的访问。

类图

抽象主题角色:可以是抽象类,也可以是接口,普通的业务类型定义,无特殊要求
具体主题角色:被代理角色、被委托角色。业务逻辑的具体执行者
代理主题角色:委托类、代理类。负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真正主题角色实现,并且在真实主题角色处理完毕前后做预处理和善后处理工作

一个代理类可以代理多个被委托对象或被代理者,因此一个代理类具体代理哪个真实主题角色由场景类决定。最简单的情况就是一个主题类和一个代理类。

优点

  1. 职责清晰
  2. 高扩展性
  3. 智能化

实现逻辑和实现的彻底解耦

缺点

使用场景

  1. 创建开销大的对象的时候,将创建过程交给代理完成。
  2. 智能指针

扩展

  1. 普通代理,客户端只能访问代理角色,而不能访问真实角色。普通代理模式的约束问题,应通过团队内的编程规范约束,因为每一个主题类都是可被重用和可维护的,使用技术约束的方法对相同维护是一种非常不利的因素。
  2. 强制代理,通过真实角色指定的代理类访问,由真实角色管理代理角色,即创建真实角色,返回代理角色。代理的管理由真实角色自己完成。
  3. 代理可以增强目标对象方法(拦截、过滤等)
  4. 虚拟代理,在需要的时候再初始化主题对象,避免被代理对象较多而引起的初始化缓慢问题。缺点是需要在每个方法中判断主题对象是否被创建。
  5. 动态代理,在实现阶段不关心谁代理谁,在运行阶段才指定代理哪一个对象。面对横切面编程(AOP)

实践

参考资料

  1. 设计模式之禅
  2. GoF+23种设计模式解析