打字猴:1.700465234e+09
1700465234 设计模式之禅 [:1700453994]
1700465235 设计模式之禅 17.4 最佳实践
1700465236
1700465237 装饰模式是对继承的有力补充。你要知道继承不是万能的,继承可以解决实际的问题,但是在项目中你要考虑诸如易维护、易扩展、易复用等,而且在一些情况下(比如上面那个成绩单例子)你要是用继承就会增加很多子类,而且灵活性非常差,那当然维护也不容易了,也就是说装饰模式可以替代继承,解决我们类膨胀的问题。同时,你还要知道继承是静态地给类增加功能,而装饰模式则是动态地增加功能,在上面的那个例子中,我不想要SortDecorator这层的封装也很简单,于是直接在Father中去掉就可以了,如果你用继承就必须修改程序。
1700465238
1700465239 装饰模式还有一个非常好的优点:扩展性非常好。在一个项目中,你会有非常多的因素考虑不到,特别是业务的变更,不时地冒出一个需求,尤其是提出一个令项目大量延迟的需求时,那种心情是相当的难受!装饰模式可以给我们很好的帮助,通过装饰模式重新封装一个类,而不是通过继承来完成,简单点说,三个继承关系Father、Son、GrandSon三个类,我要在Son类上增强一些功能怎么办?我想你会坚决地顶回去!不允许,对了,为什么呢?你增强的功能是修改Son类中的方法吗?增加方法吗?对GrandSon的影响呢?特别是GrandSon有多个的情况,你会怎么办?这个评估的工作量就够你受的,所以这是不允许的,那还是要解决问题的呀,怎么办?通过建立SonDecorator类来修饰Son,相当于创建了一个新的类,这个对原有程序没有变更,通过扩展很好地完成了这次变更。
1700465240
1700465241
1700465242
1700465243
1700465244 设计模式之禅 [:1700453995]
1700465245 设计模式之禅 第18章 策略模式
1700465246
1700465247 设计模式之禅 [:1700453996]
1700465248 18.1 刘备江东娶妻,赵云他容易吗
1700465249
1700465250 在三国演义中,我最佩服诸葛亮的地方不是因为他未出茅庐而有三分天下的预测,也不是他在赤壁鏖战中借东风的法术,更不是他七擒七纵孟获的策略,那是什么呢?是他“气死周瑜,骂死王朗”的气度和风范!想想看,你用“气”能把一个轮胎打爆,用“气”枪能够把路灯打碎,但是要把跟你没有任何血缘关系的人气死有多困难呀,更何况是周瑜这种智慧型人物!
1700465251
1700465252 在诸葛亮气周瑜的过程中,有一件事情:那就是周瑜陪了夫人又折兵这件事情。事情经过是这样的:孙权看刘备有雄起之意,杀是不能杀了,那会惹天下人唾弃,就想个招儿挫他一下,那有什么办法呢?孙权有个妹妹——孙尚香,准备招刘备做女婿,然后孙权想办法把刘备软禁起来,孙权的想法还是很单纯的嘛,就是不让你刘备回西川,然后我东吴想干啥就干啥,夺荆州,吞西川也不是不可能的。东吴的想法是好的,无奈中间多了智谋无敌的诸葛亮,他早就预测了东吴有此招数,于是在刘备去东吴招亲之前,特授以伴郎赵云三个锦囊,说是按天机拆开解决棘手问题。
1700465253
1700465254 这三个妙计分别是:找乔国老帮忙(也就是走后门了),求吴国太放行(诉苦)以及孙夫人断后,对这三个妙计不熟悉的读者可以去温习一下《三国演义》,这里就不多说了。想想看,这三个计谋有什么相似之处,他们都是告诉赵云要怎么执行,也就是说这三个计谋都有一个方法是执行,具体执行什么内容,每个计谋当然不同了,分析到这里,我们是不是就有这样一个设计思路:三个妙计应该实现的是同一个接口?聪明!是的,我们来看类图,如图18-1所示。
1700465255
1700465256
1700465257
1700465258
1700465259 图18-1 三个策略类图
1700465260
1700465261 这是非常简单的类图,在这个场景中的三个主要角色都已经有了,每个妙计都提供了一个可执行的方法,我们先来看接口,如代码清单18-1所示。
1700465262
1700465263 代码清单18-1 妙计接口
1700465264
1700465265 public interface IStrategy{
1700465266
1700465267 //每个锦囊妙计都是一个可执行的算法
1700465268
1700465269 public void operate();
1700465270
1700465271 }
1700465272
1700465273 接口很简单,定义了一个方法operate,每个妙计都是可执行的,否则那叫什么妙计,我们先看第一个妙计——找乔国老开后门,如代码清单18-2所示。
1700465274
1700465275 代码清单18-2 乔国老开后门
1700465276
1700465277 public class BackDoor implements IStrategy{
1700465278
1700465279 public void operate(){
1700465280
1700465281 System.out.println(“找乔国老帮忙,让吴国太给孙权施加压力”);
1700465282
1700465283 }
[ 上一页 ]  [ :1.700465234e+09 ]  [ 下一页 ]