打字猴:1.700460175e+09
1700460175 //do something
1700460176
1700460177 }
1700460178
1700460179 }
1700460180
1700460181 看到这里,大家别惊讶,为什么会出现before和after方法,继续看下去,这是一个“引子”,能够引出一个崭新的编程模式。
1700460182
1700460183 一个代理类可以代理多个被委托者或被代理者,因此一个代理类具体代理哪个真实主题角色,是由场景类决定的。当然,最简单的情况就是一个主题类和一个代理类,这是最简洁的代理模式。在通常情况下,一个接口只需要一个代理类就可以了,具体代理哪个实现类由高层模块来决定,也就是在代理类的构造函数中传递被代理者,例如我们可以在代理类Proxy中增加如代码清单12-9所示的构造函数。
1700460184
1700460185 代码清单12-9 代理的构造函数
1700460186
1700460187 public Proxy(Subject_subject){
1700460188
1700460189 this.subject=_subject;
1700460190
1700460191 }
1700460192
1700460193 你要代理谁就产生该代理的实例,然后把被代理者传递进来,该模式在实际的项目应用中比较广泛。
1700460194
1700460195
1700460196
1700460197
1700460198 设计模式之禅 [:1700453964]
1700460199 设计模式之禅 12.3 代理模式的应用
1700460200
1700460201 12.3.1 代理模式的优点
1700460202
1700460203 ❑职责清晰
1700460204
1700460205 真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件事务,附带的结果就是编程简洁清晰。
1700460206
1700460207 ❑高扩展性
1700460208
1700460209 具体主题角色是随时都会发生变化的,只要它实现了接口,甭管它如何变化,都逃不脱如来佛的手掌(接口),那我们的代理类完全就可以在不做任何修改的情况下使用。
1700460210
1700460211 ❑智能化
1700460212
1700460213 这在我们以上的讲解中还没有体现出来,不过在我们以下的动态代理章节中你就会看到代理的智能化有兴趣的读者也可以看看Struts是如何把表单元素映射到对象上的。
1700460214
1700460215
1700460216
1700460217
1700460218 设计模式之禅 12.3.2 代理模式的使用场景
1700460219
1700460220 我相信第一次接触到代理模式的读者肯定很郁闷,为什么要用代理呀?想想现实世界吧,打官司为什么要找个律师?因为你不想参与中间过程的是是非非,只要完成自己的答辩就成,其他的比如事前调查、事后追查都由律师来搞定,这就是为了减轻你的负担。代理模式的使用场景非常多,大家可以看看Spring AOP,这是一个非常典型的动态代理。
1700460221
1700460222
1700460223
1700460224
[ 上一页 ]  [ :1.700460175e+09 ]  [ 下一页 ]