图鉴设计模式 (一)Strategy

图说设计模式 (一)Strategy
很久很久以前, 野鸭(MallardDuck)和 红头鸭(RedheadDuck)继承自Duck。

图鉴设计模式 (一)Strategy

现在我们想让鸭子飞起来

图鉴设计模式 (一)Strategy

问题出现了,我们又新添加了 橡胶鸭子(RubberDuck),但是RubberDuck不能飞


图鉴设计模式 (一)Strategy

继承的就像富二代,什么也不做也什么都有,我可不想去再去创一次业,重fly()一次,就像富爸爸给三个儿子财产不均,这个儿子可定会闹事的。


图鉴设计模式 (一)Strategy

继承必须是所有子类共有的方法,如果不是的话,继承就变得不那么美了,我们可以重构,把不是通用的方法提炼到接口里面。


图鉴设计模式 (一)Strategy

这样就好了,我们就可以以不变应万变,如何做到呢?就是把变化的和不变的分离。
Separating what changes from what stays the same
图鉴设计模式 (一)Strategy

怎么分离呢,这就是传说中的 面向借口编程。

图鉴设计模式 (一)Strategy

图鉴设计模式 (一)Strategy

这就是OCP(Open-Close Principle)啊,Software entities should be open for extension, but close for modification.
图鉴设计模式 (一)Strategy

Replace inheritance with delegation
图鉴设计模式 (一)Strategy

全图

图鉴设计模式 (一)Strategy
又一个设计原则

图鉴设计模式 (一)Strategy
恭喜
图鉴设计模式 (一)Strategy