继承与策略模式

 

 子类从父类继承行为时有这么几种情况:

1. 这个行为在【所有或大多数】子类的的实现皆相同。那么只需要在父类实现代表【大多数】的行为,并对【个别】行为不同的子类进行【重写】即可。

图片

2. 这个行为对于【大多数】子类都有【不同】的表现,即大多数子类都需要重写它,并且没有太多相同的代码需要复用。 那么可以在父类中只声明接口,而不对其实现;在子类中各自实现这个方法即可。

图片

3. 这个行为有着几种固定的表现模式(算法簇),部分子类中的表现相同,即有代码可以复用。
 

图片

例如上图,如果有20个子类是呱呱叫,15个子类是吱吱叫,30个子类是不会叫。
如果用方式1,把谁的实现放到父类都不恰当。
如果用方式2,那大量的重复代码就没法避免。

这种情况下就可以采用【策略模式】(Strategy Pattern)。

【策略模式定义了算法簇,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
- "Head First Design Patterns"】


简单的讲,就是把行为的实现【归类】,并只实现一次,调用多次。

图片

代码下载 https://github.com/darrendev/StrategyPattern 

 

 

补充:

这个模式破除了一种思维定式:类只能是某种【事物】

而这里把类当做某种【行为】的一个具体实现

这种异想天开似的做法使得相似的行为可以得到【复用】

行为的消费者只需要关心【接口】,而不再需要四处复制和修改【实现】

 

 

 

 

posted @ 2013-12-19 05:45  darrendev  阅读(533)  评论(0编辑  收藏  举报