重构手法列表——处理概括关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q1052196521/article/details/86687313

字段上移(Pull Up Field)

现象:两个子类拥有相同的字段
动机:去除重复声明;去除重复行为
做法:将该字段移至超类

函数上移(Pull Up Method)

现象:有些函数,在各个子类中产生完全相同的结果
动机:去除重复行为
做法:将该函数移至超类

构造函数本体上移(Pull Up Constructor Body)

现象:各个子类中拥有一些构造函数,它们的本体几乎完全一致
动机:去除重复行为
做法:在超类中新建一个构造函数,并在子类构造函数中调用它

函数下移(Pull Down Method)

现象:超类中的某个函数只与部分(而非全部)子类有关
动机:职责划分需要清晰,下移能明确表示某些子类不背负这些函数的任务
做法:将这个函数移到相关的子类中

字段下移(Pull Down Field)

现象:超类中的某个字段只被部分(而非全部)子类用到
动机:明确职责
做法:将这个字段移到需要它的子类中

提炼子类(Extract Subclass)

现象:类中的某些特性只被某些(而非全部)实例用到
动机:明确职责
做法:新建一个子类,将这些特性移到子类中

提炼超类(Extract Superclass)

现象:两个类有相似特性
动机:去除重复代码
做法:为这两个类建立一个超类,将相同特性移至超类

提炼接口(Extract Interface)

现象:多个客户端使用类接口中的同一子集,或者两个类的接口有部分相同
动机:接口职责更清晰
做法:将相同的子集提炼到一个独立的接口

折叠继承体系(Collapse Hierarchy)

现象:超类和子类之间无太大区别
动机:继承体系需要简洁清晰
做法:把超类和子类合在一起

塑造模板函数(Form Template Method)

现象:一些子类的某些相应函数执行顺序相似,但是操作细节各不相同
动机:降低子类复杂度
做法:使用模板方法

以委托取代继承(Replace Inheritance with Delegation)

现象:某个子类只使用超类接口的一部分,或者根本不需要继承来的数据
动机:委托比继承更安全且灵活
做法:在子类中新建一个字段来保存超类;调整子类函数,令它委托超类;去掉两者之间的继承关系

以继承取代委托(Replace Delegation with Inheritance)

现象:两个类之间使用委托关系,但是接口中出现大量的简单的委托函数
动机:使用继承可以一下子干掉无聊繁杂的委托函数
做法:让委托类继承受托类

猜你喜欢

转载自blog.csdn.net/q1052196521/article/details/86687313