打字猴:1.700477224e+09
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(){
1700477244
1700477245 System.out.println(“加快运动员的速度:为运动员增加喷气装置”);
1700477246
1700477247 runner.run();
1700477248
1700477249 }
1700477250
1700477251 }
1700477252
1700477253 这和代理模式中的代理类也是非常相似的,只是装饰类对类的行为没有决定权,只有增强作用,也就是说它不决定被代理的方法是否执行,它只是再次增加被代理的功能。我们来看场景类,如代码清单31-6所示。
1700477254
1700477255 代码清单31-6 场景类
1700477256
1700477257 public class Client{
1700477258
1700477259 public static void main(String[]args){
1700477260
1700477261 //定义运动员
1700477262
1700477263 IRunner liu=new Runner();
1700477264
1700477265 //对其功能加强
1700477266
1700477267 liu=new RunnerWithJet(liu);
1700477268
1700477269 //看看它的跑步情况如何
1700477270
1700477271 System.out.println(”===增强后的运动员的功能===”);
1700477272
1700477273 liu.run();
[ 上一页 ]  [ :1.700477224e+09 ]  [ 下一页 ]