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

字段上移(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)

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值