有一批重构手法专门用来处理类的概括关系(generalization,即继承关系),其中主要是将函数上下移动于继承体系之中。Pull Up Field(320)和Pull Up Methar(322)都用于将特性向继承体系的上端移动,Push Down Method(328)和Push Down Field(329)则将特性向继承体系的下端移动。构造函数比较难以向上拉动,因此专门有一个Pull Up Constructor Body(325)处理它。我们不会将构造函数往下推,因为Replace Constructor with Factory Method(304)通常更管用。
如果有若干函数大体上相同,只在细节上有所差异,可以使用Form Template Method(345)将它们的共同点和不同点分开。
除了在继承体系中移动特性之外,你还可以建立新类,改变整个继承体系。Extract Subclass(330)、ExtractSuperclass(336)和Extract Interface(341)都是这样的重构手法,它们在继承体系的不同位置构造出新元素。如果你想在类型系统中标示一小部分函数,ExtractInterface(341)特别有用。如果你发现继承体系中的某些类没有存在必要,可以使用Collpse Hierarchy(344)将它们移除。 有时候你会发现继承并非最佳选择,你真正需要的其实是委托,那么,Replace Inheritance with Delegation (352)可以帮助你把继承改为委托。
有时候你又会想要做反向修改,此时就可使用Replace Delegation with Imheriance(355)。
11.1 Pull Up Field (字段上移)
11.2 Pull Up Method (函数上移)
11.3 Pull COntstructor Bosy (构造函数本体上移)
11.4 Push down Method (函数下移)
11.5 Push down Field (字段下移)
11.6 Extract SubClass (提炼子类)
类中的某些特行纸杯某些(而非全部)实例用到
新建一个子类,将上面所说的那一部分特性移到子类中
11.7 Extract SuperClass (提炼超类)
两个类有相似特性
为这两个类建立一个超类,将相同特性移至超类
11.8 Extract Interface (提炼接口)
若干客户使用类接口中的同一子集,或者两个类的接口有部分相同.
将相同的子集提炼到一个独立接口中.
11.9 Collapse Hierarchy(折叠基础体系)
超类和子类无太大区别.
将它们合为一体.
11.10 Form Termplate Method (塑造模板函数)
你有一些子类,其中相应的某些函数以相同驯熟执行类似的操作,但各个操作的细节上有所不同.
将这些操作分别放进独立函数中,并保持他们都有相同的签名,于是原函数也就变得相同了,然后将原函数上移至超类.
11.11 Replace Inheritance With Delegation(以委托取代继承)
某个子类只是用超类接口中的一部分,或者是根本不需要继承而来的数据.
在子类中新建一个字段用以保存超类; 调整子类函数,令它改而委托超类;然后去掉两者之间的继承关系.
11.12 Replace Delegation With Inheritance(以继承取代委托)
- 本文链接: https://halo.cjh.kim/archives/重构改善既有代码的设计11
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!