图说设计模式 (一)Strategy
很久很久以前, 野鸭(MallardDuck)和 红头鸭(RedheadDuck)继承自Duck。
现在我们想让鸭子飞起来
问题出现了,我们又新添加了 橡胶鸭子(RubberDuck),但是RubberDuck不能飞
继承的就像富二代,什么也不做也什么都有,我可不想去再去创一次业,重fly()一次,就像富爸爸给三个儿子财产不均,这个儿子可定会闹事的。
继承必须是所有子类共有的方法,如果不是的话,继承就变得不那么美了,我们可以重构,把不是通用的方法提炼到接口里面。
这样就好了,我们就可以以不变应万变,如何做到呢?就是把变化的和不变的分离。
Separating what changes from what stays the same
怎么分离呢,这就是传说中的 面向借口编程。
这就是OCP(Open-Close Principle)啊,Software entities should be open for extension, but close for modification.
Replace inheritance with delegation
全图
又一个设计原则
恭喜