以下是《重构》一书中关于在对象(类)之间搬移特性的八种手法。

  • Move Method(搬移函数):如果一个函数与其所在类之外的另一个类交流更为频繁,应当在那个类中建立一个行为相近的新函数,然后把旧函数改为委托函数,或者直接移除旧函数。
  • Move Field(搬移字段):与 Move Method 思路相似,把字段移到与它关系更密切的类中。
  • Extract Class(提炼类):当一个类不断扩展、变得庞大臃肿时,建立一个新类,把相关的字段和函数从旧类搬移到新类,从而拆分职责。
  • Inline Class(类内联):如果某个类做的事情太少,就把它的所有特性移到另一个类中,再移除原类。
  • Hide Delegate(隐藏委托):封装的本质是让每个对象尽可能少地了解系统其他部分,从而减少变化时的波及范围。如果客户通过服务对象的某个字段获取另一个对象并调用其函数,客户就必须了解这层委托关系。可以在服务对象上提供一个简单的委托函数,将委托关系隐藏起来,使依赖仅限于服务对象内部,而不涉及客户端——这本质上是进一步封装。
  • Remove Middle Man(移除中间人):与 Hide Delegate 相反。当某个类承担了过多简单委托时,不如让客户直接调用受托类。
  • Introduce Foreign Method(引入外加的函数):当需要为某个服务类添加函数,却无法修改该类时,在客户类中建立一个函数,并以第一个参数的形式传入服务类的实例。
  • Introduce Local Extension(引入本地扩展):当需要服务类提供一些额外的函数,却无法修改该类时,建立一个新类,使其包含这些额外函数,并让这个扩展类成为原类的子类或包装类。