继承与策略模式
子类从父类继承行为时有这么几种情况:
1. 这个行为在【所有或大多数】子类的的实现皆相同。那么只需要在父类实现代表【大多数】的行为,并对【个别】行为不同的子类进行【重写】即可。 2. 这个行为对于【大多数】子类都有【不同】的表现,即大多数子类都需要重写它,并且没有太多相同的代码需要复用。 那么可以在父类中只声明接口,而不对其实现;在子类中各自实现这个方法即可。 3. 这个行为有着几种固定的表现模式(算法簇),部分子类中的表现相同,即有代码可以复用。 例如上图,如果有20个子类是呱呱叫,15个子类是吱吱叫,30个子类是不会叫。 如果用方式1,把谁的实现放到父类都不恰当。 如果用方式2,那大量的重复代码就没法避免。 这种情况下就可以采用【策略模式】(Strategy Pattern)。 【策略模式定义了算法簇,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 - "Head First Design Patterns"】 简单的讲,就是把行为的实现【归类】,并只实现一次,调用多次。 代码下载 https://github.com/darrendev/StrategyPattern
|
补充:
这个模式破除了一种思维定式:类只能是某种【事物】
而这里把类当做某种【行为】的一个具体实现
这种异想天开似的做法使得相似的行为可以得到【复用】
行为的消费者只需要关心【接口】,而不再需要四处复制和修改【实现】