重构阅读笔记3

第十章 简化函数调用

  1. Rename Method(函数改名)
    • 函数的名称未能揭示函数的用途。修改函数名称。
  2. Add Parameter(添加参数)
    • 某个函数需要从调用端得到更多信息。为此函数添加一个对象参数,让该对象带进函数所需信息。
  3. Remove Parameter(移除函数)
    • 函数本体不再需要某个参数。将该参数去除。
  4. Separate Query fom Modifier(将查询函数和修改函数分离)
    • 某个函数即返回对象状态值,又修改对象状态。建立两个不同的函数,其中一个负责查询,另一个负责修改。
  5. Parameterize Method(令函数携带参数)
    • 若干函数做了类似的工作,但在函数本体中却包含了不同的值。
  6. Replace Parameter with Explicit Methods(以明确函数取代参数)
    • 你有一个函数,其中完全取决于参数值而采取不同行为。针对该参数的每一个可能值,建立一个独立函数。
  7. Preserve Whole Object(保持对象完整)
    • 你从某个对象中取出若干值,将他们作为某一次函数调用时的参数。改为传递整个对象。
  8. Replace Parameter with Methods(以函数取代参数)
    • 对象调用某个函数,并将所得结果作为参数,传递给另一个函数。而接受该参数的函数本身也能够调用前一个函数。让参数接受者去除该项参数,并直接调用前一个函数。
  9. Introduce Parameter Object(引入参数对象)
    • 某些参数总是很自然地同时出现。以一个对象取代这些参数。
  10. Remove Setting Method(移除设置函数)
    • 类中的某个字段应该在对象创建时被设值,然后就不再改变。去掉该字段的所有设值函数。
  11. Hide Method(隐藏函数)
    • 有一个函数,从来没有被其他任何类用到。将这个函数修改为private。
  12. Replace Constructor with Factory Method(以工厂函数取代构造函数)
    • 你希望在创建对象时不仅仅是做简单的构建动作。将构造函数替换为工厂函数。
  13. Encapsulate Downcase(封装向下转型)
    • 某个函数返回的对象,需要由函数调用者执行向下转型(downcase)。将向下转型动作移到函数中。
  14. Replace Error Code with Exception(以异常取代错误码)
    • 某个函数返回一个特定的代码,用以表示某种错误情况。改用异常。
  15. Replace Exception with Test(以测试取代异常)
    • 面对一个调用者可以预见检查的条件,你抛出了一个异常。修改调用者,使它在调用函数之前先做检查。

第十一章 处理概括关系

  1. Pull Up Field(字段上移)
    • 两个子类拥有相同的字段。将该字段移至超类。
  2. Pull Up Method(函数上移)
    • 有些函数,在各个子类中产生完全相同的结果。将该函数移至超类。
  3. Pull Up Contrructor Body(构造函数本体上移)
    • 你在各个子类中拥有一些构造函数,它们的本体几乎完全一致。在超类中新建一个构造函数,并在子类构造函数中调用它。
  4. Push Down Method(函数下移)
    • 超类中的某个函数只与部分(而非全部)子类有关。将这个函数移到相关的那些子类去。
  5. Push Down Field(字段下移)
    • 超类中的某个字段只被部分(而非全部)子类用到。将这个字段移到需要它的那些子类去。
  6. Extract Subclass(提炼子类)
    • 类中的某些特性只被某些(而非全部)实例用到。新建一个子类,将上面所说的那一部分特性移到子类中。
  7. Extract Superclass(提炼超类)
    • 两个类有相似特性。为两个类建立一个超类,将相同特性移至超类。
  8. Extract Interface(提炼接口)
    • 若干客户使用类接口中的同一子集,或者两个类的接口有部分相同。将相同的子集提炼到一个独立接口中。
  9. Collapse Hierarchy(折叠继承体系)
    • 超类和子类之间无太大区别。将他们合为一体。
  10. Form TemPlate Method(塑造模板函数)
    • 你有一些子类,其中相应的某些函数以相同顺序执行类似的操作,但各个操作的细节上有所不同。将这些操作分别放进独立函数中,并保持它们都有相同签名,于是原函数也就变得相同了。然后将原函数上移至超类。
  11. Replace Inheritance with Delegation(以委托取代继承)
    • 某个子类只使用超类接口中德一部分,或是根本不需要继承而来的数据。在子类中新建一个字段用以保存超类;调整子类函数,令它改而委托超类;然后去掉两者之间的继承关系。
  12. Replace Delegation with Inheritance(以继承取代委托)
    • 你在两个类之间使用委托关系,并经常为整个接口编写许多极简单的委托函数。让委托类继承受托类。

第十二章 大型重构

  1. Tease Apart Inheritance(梳理并分解继承体系)
    • 某个继承体系同时承担两项责任。建立两个继承体系,并通过委托关系让其中一个可以调用另外一个。
  2. Convert Procedural Design to Objects(将过程化设计转化为对象设计)
    • 你手上有一些传统过程化风格的代码。将数据记录变成对象,将大块的行为分成小块,并将行为移入相关对象之中。
  3. Separate Domain from Presentation(将领域和表述/显示分离)
    • 某些GUI类之中包含了领域逻辑。将领域逻辑分离出来,为他们建立独立的领域类。
  4. Extract Hierarchy(提炼继承体系)
    • 你有某个类做了太多工作,其中一部分工作时以大量条件表达式完成的。建立继承体系,以一个类表示一种特殊情况。



链接:https://www.jianshu.com/p/702f3ff2aabd

posted on 2021-05-21 09:18  孔kk  阅读(70)  评论(0)    收藏  举报

导航