第十章 简化函数调用 Making Method Calls Simpler
10.1 Rename Method(重命名函数)
症状:函数的名称未能揭示函数的用途。
解决办法:修改函数名称
10.2 Add Parameter(添加参数)
症状:某个函数需要从调用端得到更多信息
解决办法:为此函数添加一个对象参数,让该对象带进函数所需信息
10.3 Remove Parameter(移除参数)
症状:函数本体(method body)不再需要某个参数。
解决办法:将该参数去除。
10.4 Separate Query from Modifier(将查询函数和修改函数分离)
症状: 某个函数既返回对象状态值,又修改对象状态(state)。
解决办法:建立两个不同的函数,其中一个负责查询,另一个负责修改。
10.5 Parameterize Method(令函数携带参数)
症状: 若干函数做了类似的工作,但在函数本体中却包含了不同的值。
解决办法:建立单一函数,以参数表达那些不同的值。
10.6 Replace Parameter with Explicit Methods(以明确函数取代参数)
症状:你有一个函数,其内完全取决于参数值而采取不同的反应。
解决办法:针对该参数的每一个可能值,建立一个独立函数。
10.7 Preserve Whole Object(保持对象完整)
症状:你从某个对象中取出若干值,将它们作为某一次函数调用时的参数。
解决办法:该使用(传递)整个对象。
10.8 Replace Parameter with Method(以函数取代参数)
症状:对象调用某个函数,并将所得结果作为参数,传递给另一个函数。而接受该参数的函数也可以(也有能力)调用前一个函数。
解决办法:让参数接受者去除该项参数,并直接调用前一个函数。
10.9 Introduce Parameter Object(引入参数对象)
症状: 某些参数总是很自然地同时出现
解决办法:以一个对象取代这些参数。
10.10 Remove Setting Method(移除设值函数)
症状: 你的class中的某个值域,应该在对象初创时被设值,然后就不再改变。
解决办法:去掉该值域的所哟设置函数(setter).
10.11 Hide Method(隐藏某个函数)
症状: 有一个函数,从来没有被其他任何class用到。
解决办法:将这个函数修改为private.
10.12 Replace Constructor with Factory Method(用工厂函数取代构造函数)
症状:你希望在创建对象时不仅仅是对它做简单的构建动作(simple construction)
解决办法:将costructor(构造函数)替换为factory method(工厂函数)
10.13 Encapsulate Downcast(封装向下转型动作)
症状:某个函数返回的对象,需要由函数调用者执行向下转型(downcast)动作。
解决办法:将向下转型(downcast)动作移到函数中。
10.14 Replace Error Code with Exception(以异常取代错误码)
症状:某个函数返回一个特定的代码(special code),用以表示某种错误情况。
解决办法:改用异常(exception).
10.15 Replace Exception with Test(以测试取代异常)
症状:面对一个(调用者可预先加以检查)的条件,你抛出了一个异常。
解决办法:修改调用者,使它在调用函数之前先做检查。