《设计模式解析》 第9章 Strategy模式 复习题
1、对于新的需求应对方案:
a) 修改原有代码,及所涉及的所有地方。
b) 在分支语句当中添加新的情况。
c) 使用继承,进行扩展
d) 将功能实现委托给其他类。
2、三项基本原则:
a) “针对接口编程,而不要针对实现编程”。
b) “优先使用对象组合,而不是类继承”。
i. 过多的继承容易造成类爆炸。
ii. 使用组合有助于类的分装,将功能集中于单个类中。
iii. 继承中,子类会获取父类所有方法,而不管有无需要。组合避免了继承的强耦合关系,有更大的灵活性。
c) “考虑设计中什么应该是可变的。不是考虑什么会迫使设计发生改变,而是什么能够在不引起重新设计的前提下改变。对变化的概念进行封装。”
3、Strategy意图:可以根据上下文,使用不同的业务规则和算法。
4、效果:
a) 可以不适用switch或条件语句进行规则的选择。
b) 需要使用相同的方式调用所有的算法。
1、“关注引起重新设计的原因”,会使得你在设计的时候,把这些可能的变化考虑进去,所做出的设计能够满足假设当中的变化(满足的仅仅是考虑到的变化),但这个设计并不一定是能够应对其他变化的设计。然而,需求的变化总是无法准确估计的。“考虑设计中什么应该是可变的”,并为具体到可能有哪些需求的变更,那么,你的设计就必须应对这些有可能的变化的部分,并为之设计出可应对变化的方案,以不变应万变。
2、这种方式
a) 会导致代码的冗余,而导致今后如果要进行代码修改时,要将所有的代码进行修改,并且要考虑到所有地方相关的影响。
b) 会导致程序的低内聚,一些本不该又自己处理的事务,却自己进行处理。没有遵循“一个类一个职责”的原则。
3、“分支蔓延”,switch或者if else 中,由于不断增加新的判断,而导致语句的结构越来越庞大。
4、将变化进行封装,使得外界对于他的变化一无所知。便于代码复用,程序的扩展。并使得职责的转移更容易。
5、以下:
a) 过多的继承容易造成类爆炸。
b) 使用组合有助于类的封装,将功能集中于单个类中。
c) 继承中,子类会获取父类所有方法,而不管有无需要。组合避免了继承的强耦合关系,有更大的灵活性。
1、由于某些变化,导致程序需要进行大量的调整,而难以进行。究其原因,因为代码存在大量的冗余,并且相关的类间耦合度太高,导致修改了一处,就必须对多出进行修改、调试。
2、在一些不会产生变化的情况下,可以使用分支语句,这样,程序可读性也较高。但在一些可能会出现变化的地方,使用分支语句,可能会导致“分支蔓延”。