重构思想
很难说什么程度的重构才是合适的。 因为我可以在系统运行过程中不断进行调整。 随着代码的变化, 重构尺度也相应改变。 6个月前恰如其分的重构, 现今可能就显得笨拙。 重构的意义就在于:你永远不必说对不起——只要把出问题的地方修补好就行了。
有一条流行的原则: “对象组合优于类继承” ( “组合” 跟“委托” 是同一回事) 。 很多人把这句话解读为“继承有害” , 并因此声称绝不应该使用继承。 我经常使用继承, 部分是因为我知道, 如果稍后需要改变, 我总可以使用以委托取代子类。 继承是一种很有价值的机制, 大部分时候能达到效果, 不会带来问题。 所以我会从继承开始, 如果开始出现问题, 再转而使用委托。 这种用法与前面说的原则实际上是一致的——这条出自名著《设计模式》 [gof]的原则解释了如何让继承和组合协同工作。 这条原则之所以强调“组合优于继承” , 其实是对彼时继承常被滥用的回应。熟悉《设计模式》 一书的读者可以这样来理解本重构手法, 就是用状态( State) 模式或者策略( Strategy) 模式取代子类。 这两个模式在结构上是相同的, 都是由宿主对象把责任委托给另一个继承体系。 以委托取代子类并非总会需要建立一个继承体系来接受委托, 不过建立一个状态或策略的继承体系经常都是有用的。
案例剖析
参考资料
《重构与模式》
《重构改善既有代码的设计第2版》