《设计模式之禅》之代理模式

一、代理模式的定义

为其他对象提供一种代理以控制对这个对象的访问。

代理模式也叫委托模式,它是一项基本设计技巧。许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式,而且在日常的应用中,代理模式可以提供非常好的访问控制。如Struts2的Form元素映射就是采用了代理模式。

代理模式通用类:

1.Subject抽象主题角色

抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。

2.RealSubject具体主题角色

也叫做被委托角色、被代理角色。它才是业务逻辑的具体执行者。

3.Proxy代理主题角色

也叫做委托类、代理类。它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色的实现,并且在真实主题角色处理完毕前后做预处理和善后处理工作。

二、代理模式的应用

1.代理模式的优点

(1)职责清晰

真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件事务,附带的结果就是编程简洁清晰。

(2)高扩展性

具体主题角色是随时都会发生变化的,只要它实现了接口,不管它如何变化,都逃不脱接口,那我们的代理类完全就可以在不做任何修改的情况下使用。

(3)智能化

动态代理可以体现出来

2.代理模式的使用场景

结合现实生活,以打官司为例,打官司为什么要找个律师?因为你不想参与中间过程的是是非非,只要完成自己的答辩就成,其他的如事前调查、事后追查都由律师来搞定,这就是为了减轻你的负担。SpringAop,就是一个非常典型的动态代理。

三、最佳实践

代理模式的应用非常广泛,大到一个系统框架、企业平台,小到代码片段、事务处理,稍不留意就用到代理模式。

注意:
在学习AOP框架时,弄清楚几个名词就成:切面(Aspect)、切入点(JoinPoint)、通知(Advice)、织入(Weave)就足够了,理解了这几个名词,有助于更好的学习和理解其原理。

github示例代码:https://github.com/developers-youcong/DesignPatternPractice/tree/master/Proxy

此章有待补充普通代理、强制代理、动态代理……

文章目录
  1. 1. 一、代理模式的定义
    1. 1.1. 1.Subject抽象主题角色
    2. 1.2. 2.RealSubject具体主题角色
    3. 1.3. 3.Proxy代理主题角色
  2. 2. 二、代理模式的应用
    1. 2.1. 1.代理模式的优点
      1. 2.1.1. (1)职责清晰
      2. 2.1.2. (2)高扩展性
      3. 2.1.3. (3)智能化
    2. 2.2. 2.代理模式的使用场景
  3. 3. 三、最佳实践