1700477174
1700477175
我们只是定义了一个代理人,并没有明确定义是哪一个运动员的代理,需要在运行时指定被代理者,而且我们还在代理人的run方法中做了判断,想让被代理人跑步就跑步,不乐意就拒绝,对于主题类的行为是否可以发生,代理类有绝对的控制权。我们编写一个场景类来模拟这种情况,如代码清单31-4所示。
1700477176
1700477177
代码清单31-4 场景类
1700477178
1700477179
public class Client{
1700477180
1700477181
public static void main(String[]args){
1700477182
1700477183
//定义一个短跑运动员
1700477184
1700477185
IRunner liu=new Runner();
1700477186
1700477187
//定义liu的代理人
1700477188
1700477189
IRunner agent=new RunnerAgent(liu);
1700477190
1700477191
//要求运动员跑步
1700477192
1700477193
System.out.println(”====客人找到运动员的代理要求其去跑步===”);
1700477194
1700477195
agent.run();
1700477196
1700477197
}
1700477198
1700477199
}
1700477200
1700477201
由于我们使用了随机数产生模拟结果,因此运行结果有两种可能情况,第一种情况如下所示:
1700477202
1700477203
====客人找到运动员的代理要求其去跑步===
1700477204
1700477205
代理人同意安排运动员跑步
1700477206
1700477207
运动员跑步:动作很潇洒
1700477208
1700477209
运行结果的第二种情况如下所示:
1700477210
1700477211
====客人找到运动员的代理要求其去跑步===
1700477212
1700477213
代理人心情不好,不安排运动品跑步
1700477214
1700477215
不管是哪种情况,我们都证实了代理的一个功能:在不改变接口的前提下,对过程进行控制。在我们例子中,运动员要不要跑步是由代理人决定的,代理人说跑步就跑步,说不跑就不跑,它有绝对判断权。
1700477216
1700477217
1700477218
1700477219
1700477220
设计模式之禅 31.1.2 装饰模式
1700477221
1700477222
如果使用装饰模式,我们该怎么实现这个过程呢?装饰模式是对类功能的加强,怎么加强呢?增强跑步速度!在屁股后面安装一个喷气动力装置,类似火箭的喷气装置,那速度变得很快,《蜘蛛侠》中的那个反面角色不就是这样的吗?好,我们来看类图,如图31-2所示。
1700477223
[
上一页 ]
[ :1.700477174e+09 ]
[
下一页 ]