打字猴:1.700477194e+09
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
1700477224 很惊讶?这个代理模式完全一样的类图?是的,完全一样!不过其实现的意图却不同,我们先来看代码,IRunner和Runner与代理模式相同,详见代码清单31-1和代码清单31-2所示,在此不再赘述。我们来看装饰类RunnerWithJet,如代码清单31-5所示。
1700477225
1700477226
1700477227
1700477228
1700477229 图31-2 增强运动员的功能
1700477230
1700477231 代码清单31-5 装饰类
1700477232
1700477233 public class RunnerWithJet implements IRunner{
1700477234
1700477235 private IRunner runner;
1700477236
1700477237 public RunnerWithJet(IRunner_runner){
1700477238
1700477239 this.runner=_runner;
1700477240
1700477241 }
1700477242
1700477243 public void run(){
[ 上一页 ]  [ :1.700477194e+09 ]  [ 下一页 ]