以工厂函数取代构造函数
希望在创建对象时不仅仅是做简单的建构动作 。将构造函数替换为工厂函数。
处理概括关系
字段上移
两个子类拥有相同的字段。将该字段移至超类。
函数上移
有些函数在各子类中产生完全相同的结果。将该函数移至超类。
构造函数本体上移
各个子类中有一些构造函数本体几乎完全一致 。在超类中新建一个构造函数,并在子类构造函数中调用它。
函数下移
超类中的某个函数只与部分(而非全部)子类用到。将函数移到相关的子类中。
字段下移
超类中的某个字段只被部分(而非全部)子类用到。将字段移到需要它的子类中。
提炼子类
类中的某些特性只被某些(而非全部)实例用到。新建一个子类,将上述部分的特性移到子类中。
提炼超类
两个类有相似特性。为这两个类建立一个超类,将相同特性移至超类。
提炼接口
若干客户使用类接口中的同一子集,或两个类的接口有部分相同。将相同的子集提炼到一个独立接口中。
折叠继承体系
超类和子类之间无太大区别。将它们合为一体。
塑造模板函数
子类中某些函数以相同顺序执行类似操作,但各操作细节略有不同。将操作放进独立函数(保持签名相同),然后将它们移至超类。
以委托取代继承
某个子类只使用超类接口中的一部分或根本不需要继承而来的数据。子类新建字段保存超类,调整子类函数为委托超类,取消继承关系。
以继承取代委托
你在两个类中使用委托关系,并经常为整个接口编写许多极简单的委托函数。让委托类继承受托类。