1700460794
1700460795
张三又升了一级!
1700460796
1700460797
升级总费用是:150元
1700460798
1700460799
结束时间是:2009-8-26 03:40
1700460800
1700460801
好了,代理公司也赚钱了,我的游戏也升级了,皆大欢喜。代理类不仅仅是可以有自己的运算方法,通常的情况下代理的职责并不一定单一,它可以组合其他的真实角色,也可以实现自己的职责,比如计算费用。代理类可以为真实角色预处理消息、过滤消息、消息转发、事后处理消息等功能。当然一个代理类,可以代理多个真实角色,并且真实角色之间可以有耦合关系,读者可以自行扩展一下。
1700460802
1700460803
1700460804
1700460805
1700460806
设计模式之禅 12.4.4 虚拟代理
1700460807
1700460808
虚拟代理(Virual Proxy)听着很复杂,其实非常简单,我们只要把代理模式的通用代码稍微修改一下就成为虚拟代理,修改后的代理类如代码清单12-21所示。
1700460809
1700460810
代码清单12-21 虚拟代理类
1700460811
1700460812
public class Proxy implements Subject{
1700460813
1700460814
//要代理哪个实现类
1700460815
1700460816
private Subject subject;
1700460817
1700460818
//实现接口中定义的方法
1700460819
1700460820
public void request(){
1700460821
1700460822
//判断一下真实主题是否初始化
1700460823
1700460824
if(subject==null){
1700460825
1700460826
subject=new RealSubject();
1700460827
1700460828
}
1700460829
1700460830
subject.request();
1700460831
1700460832
}
1700460833
1700460834
}
1700460835
1700460836
在需要的时候才初始化主题对象,可以避免被代理对象较多而引起的初始化缓慢的问题。其缺点是需要在每个方法中判断主题对象是否被创建,这就是虚拟代理,非常简单。
1700460837
1700460838
1700460839
1700460840
1700460841
设计模式之禅 12.4.5 动态代理
1700460842
1700460843
放在最后讲的一般都是压轴大戏,动态代理就是如此,上面的章节都是一个引子,动态代理才是重头戏。什么是动态代理?动态代理是在实现阶段不用关心代理谁,而在运行阶段才指定代理哪一个对象。相对来说,自己写代理类的方式就是静态代理。本章节的核心部分就在动态代理上,现在有一个非常流行的名称叫做面向横切面编程,也就是AOP(Aspect Oriented Programming),其核心就是采用了动态代理机制,既然这么重要,我们就来看看动态代理是如何实现的,还是以打游戏为例,类图修改一下以实现动态代理,如图12-7所示。
[
上一页 ]
[ :1.700460794e+09 ]
[
下一页 ]