处理泛化
抽象有它自己的一组重构技术,主要与沿着类继承层次结构移动功能、创建新类和接口以及用委托替换继承相关,反之亦然。
问题:两个类具有相同的字段。
解决方案:从子类中删除字段并将其移动到父类中。
问题:子类具有执行类似工作的方法。
解决方案:使方法相同,然后将它们移动到相关的超类中。
问题:子类的构造函数代码基本相同。
解决方案:创建一个超类构造函数,并将子类中相同的代码移动到它。在子类构造函数中调用父类构造函数。
问题:行为是否在只被一个(或几个)子类使用的超类中实现?
解决方案:将此行为移到子类中。
问题:字段是否只在少数子类中使用?
解决方案:将字段移动到这些子类。
问题:类具有仅在特定情况下使用的特性。
解决方案:创建一个子类并在这些情况下使用它。
问题:您有两个具有公共字段和方法的类。
解决方案:为它们创建一个共享的超类,并将所有相同的字段和方法移动到它。
问题:多个客户端使用类接口的相同部分。另一种情况:两个类中的部分接口是相同的。
解决方案:将这个相同的部分移动到它自己的接口。
问题:在类层次结构中,子类实际上与其父类相同。
解决方案:合并子类和超类。
问题:子类实现的算法以相同的顺序包含类似的步骤。
解决方案:将算法结构和相同的步骤移到超类中,并将不同步骤的实现留在子类中。
问题:你有一个子类,它只使用超类的一部分方法(或者不可能继承超类数据)。
解决方案:创建一个字段,并在其中放置一个超类对象,将方法委托给超类对象,并摆脱继承。
问题:一个类包含许多简单的方法,这些方法委托给另一个类的所有方法。
解决方案:使类成为委托继承程序,这样就不需要委托方法了。