打字猴:1.700477259e+09
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();
1700477274
1700477275 }
1700477276
1700477277 }
1700477278
1700477279 运行结果如下所示:
1700477280
1700477281 ===增强后的运动员的功能===
1700477282
1700477283 加快运动员的速度:为运动员增加喷气装置
1700477284
1700477285 运动员跑步:动作很潇洒
1700477286
1700477287 注意 思考一下我们的程序,我们通过增加了一个装饰类,就完成了对原有类的功能增加,由一个普通的短跑运动员变成了带有喷气装置的超人运动员,其速度岂是普通人能相比的?!
1700477288
1700477289
1700477290
1700477291
1700477292 设计模式之禅 31.1.3 最佳实践
1700477293
1700477294 通过例子,我们可以看出代理模式和装饰模式有非常相似的地方,甚至代码实现都非常相似,特别是装饰模式中省略抽象装饰角色后,两者代码基本上相同,但是还是有细微的差别。
1700477295
1700477296 代理模式是把当前的行为或功能委托给其他对象执行,代理类负责接口限定:是否可以调用真实角色,以及是否对发送到真实角色的消息进行变形处理,它不对被主题角色(也就是被代理类)的功能做任何处理,保证原汁原味的调用。代理模式使用到极致开发就是AOP,这是各位采用Spring架构开发必然要使用到的技术,它就是使用了代理和反射的技术。
1700477297
1700477298 装饰模式是在要保证接口不变的情况下加强类的功能,它保证的是被修饰的对象功能比原始对象丰富(当然,也可以减弱),但不做准入条件判断和准入参数过滤,如是否可以执行类的功能,过滤输入参数是否合规等,这不是装饰模式关心的。
1700477299
1700477300 代理模式在Java的开发中俯拾皆是,是大家非常熟悉的模式,应用非常广泛,而装饰模式是一个比较拘谨的模式,在实际应用中接触比较少,但是也有不少框架项目使用了装饰模式,例如在JDK的java.io.*包中就大量使用装饰模式,类似如下的代码:
1700477301
1700477302 OutputStream out=new DataOutputStream(new FileOutputStream(“test.txt”))
1700477303
1700477304 这是装饰模式的一个典型应用,使用DataOutputStream封装了一个FileOutputStream,以方便进行输出流处理。
1700477305
1700477306
1700477307
1700477308
[ 上一页 ]  [ :1.700477259e+09 ]  [ 下一页 ]