以下是简化函数调用相关重构手法的整理,共 15 条。

  1. rename method(函数改名):函数名称未能揭示函数的用途时,修改函数名称使其更具表达力。
  2. add parameter(添加参数):为函数添加一个对象参数,让该对象把函数所需的信息带入函数。
  3. remove parameter(移除参数):函数本体不再需要某个参数时,将该参数移除。
  4. separate query from modifier(把查询函数和修改函数分离):若某个函数既返回对象状态值,又修改对象状态,则建立两个不同的函数:一个负责查询,另一个负责修改。
  5. parameterize method(令函数携带参数):若几个函数做了类似的工作,但函数本体包含不同的值,则建立一个单一函数,以参数表达那些不同的值。
  6. replace parameter with explicit methods(以明确函数取代参数):若一个函数完全依据参数值采取不同行为,则针对参数的每一个可能值,建立一个独立的函数。
  7. preserve whole object(保持对象完整):若从某个对象中取出若干值并将其作为函数调用的参数,改为直接传递整个对象。
  8. replace parameter with method(以函数取代参数):对象调用某个函数,并将所得结果作为参数传递给另一个函数,而接受该参数的函数本身也能调用前一个函数。此时让参数接受者去除该参数,并直接调用前一个函数。
  9. introduce parameter object(引入参数对象):某些参数总是自然地同时出现时,以一个对象取代这些参数。
  10. remove setting method(移除设置器):类中某个变量在对象创建时被赋值后不再改变,则去掉该字段的所有赋值函数。
  11. hide method(隐藏函数):某个函数从未被其他任何类用到,则将其修改为 private
  12. replace constructor with factory method(以工厂函数取代构造函数):在创建对象时不仅仅希望做简单的构建工作,则将构造函数替换为工厂函数。
  13. encapsulate downcast(封装向下转型):某个函数返回的对象需要由调用者执行向下转型,则将向下转型动作移到函数内部完成。
  14. replace error code with exception(以异常取代错误码):某个函数返回特定代码以表示某种错误情况,改用异常代替。
  15. replace exception with test(以测试取代异常):面对调用者可以预先检查的条件却抛出了异常时,修改调用者,使其在调用前先做检查。