打字猴:1.700460071e+09
1700460071 设计模式之禅 [:1700453963]
1700460072 设计模式之禅 12.2 代理模式的定义
1700460073
1700460074 代理模式(Proxy Pattern)是一个使用率非常高的模式,其定义如下:
1700460075
1700460076 Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。)
1700460077
1700460078 代理模式的通用类图如图12-3所示。
1700460079
1700460080
1700460081
1700460082
1700460083 图12-3 代理模式的通用类图
1700460084
1700460085 代理模式也叫做委托模式,它是一项基本设计技巧。许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式,而且在日常的应用中,代理模式可以提供非常好的访问控制。在一些著名开源软件中也经常见到它的身影,如Struts2的Form元素映射就采用了代理模式(准确地说是动态代理模式)。我们先看一下类图中的三个角色的定义:
1700460086
1700460087 ❑Subject抽象主题角色
1700460088
1700460089 抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。
1700460090
1700460091 ❑RealSubject具体主题角色
1700460092
1700460093 也叫做被委托角色、被代理角色。它才是冤大头,是业务逻辑的具体执行者。
1700460094
1700460095 ❑Proxy代理主题角色
1700460096
1700460097 也叫做委托类、代理类。它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在真实主题角色处理完毕前后做预处理和善后处理工作。
1700460098
1700460099 我们首先来看Subject抽象主题类的通用源码,如代码清单12-6所示。
1700460100
1700460101 代码清单12-6 抽象主题类
1700460102
1700460103 public interface Subject{
1700460104
1700460105 //定义一个方法
1700460106
1700460107 public void request();
1700460108
1700460109 }
1700460110
1700460111 在接口中我们定义了一个方法request来作为方法的代表,RealSubject对它进行实现,如代码清单12-7所示。
1700460112
1700460113 代码清单12-7 真实主题类
1700460114
1700460115 public class RealSubject implements Subject{
1700460116
1700460117 //实现方法
1700460118
1700460119 public void request(){
1700460120
[ 上一页 ]  [ :1.700460071e+09 ]  [ 下一页 ]