简化函数调用
10.1 Rename Method (函数改名)
函数的名称未能揭示函数的用途
修改函数名称
将复杂的处理过程分解成小函数, 小函数要用好, 必须要有一个好命名, 不是会适得其反.
你不会一次就把名字起好, 大胆的更改吧.
10.2 Add Parameter (添加参数)
某个函数需要从调用端得到更多信息
为此函数添加一个对象参数, 让该对象带进函数所需信息
添加新参数的时候你应该考虑引入对象参数
10.3 Remove Parameter (移除参数)
函数本体不再需要某个参数
将该参数去除
程序员常常喜欢添加参数, 却往往不愿意去除它们.
10.4 Separate Query from Modified (将查询函数和修改函数分离)
某个函数即返回对象状态值, 有修改对象状态
建立两个不同的函数, 其中一个负责查询, 另一个负责修改.
- 记住函数的功能要单一, 如果你在多线程操作的话, 你会遇到麻烦.
10.5 Parameterize Method (另函数携带参数)
若干函数做了类似的工作, 但在函数本体中却包含了不同的值
建立单一函数, 以参数表达那些不同的值
10.6 Replace Parameter with Explicit Method (以明确函数取代参数)
你有一个函数, 其中完全取决于参数值而采取不同行为
针对该参数的每一个可能值, 建立一个独立函数
10.7 Preserve Whole Object (保存对象完整)
你从某个对象中取出若干值, 将它们作为某一次函数调用时的参数
改为传递整个对象
- 可以使得参数列更固定. 往往还能提高代码的可读性.
- 但如果你传递的是整个对象, 被调用函数所在的对象就需要依赖参数对象. 如果这会使得你的依赖结构恶化, 那么就不要使用此项重构.
10.8 Replace Parameter with Method (以函数取代参数)
对象调用某个函数, 并将所得结果作为参数, 传递给另一个函数, 而接受该参数的函数本身也能够调用前一个函数.
让参数接受者去除该项参数, 并直接调用前一个函数.
10.9 Introduce Parameter Object (引入参数对象)
某些参数总是很自然地同时出现
以一个对象取代这些参数
当你把参数组织到一起之后, 往往很快可以发现一些可被移至新建类的行为.
10.10 Remove Setting Method (移除设值函数)
类中的某个字段应该在对象创建时被设值, 然后就不再改变
取代该字段的所有设值函数
10.11 Hide Method (隐藏函数)
有一个函数, 从来没有被其他任何类用到
将这个函数修改为private
10.12 Replace Constructor with Factory Method (用工程函数取代构造函数)
你希望在创建对象时不仅仅是做简单的构建动作
将构造函数替换为工厂函数
- 在派生子类的过程中以工厂函数取代类型码.
10.13 Encapsulate Downcast (封装向下转型)
某个函数返回的对象, 需要由函数调用者执行向下转型
将向下转型动作移到函数中
10.14 Replace Error Code with Exception (以异常取代错误码)
某个函数返回一个特定的代码, 用以表示某种错误情况
改用异常
10.15 Replace Exception with Test (以测试取代异常)
面对一个调用者可以预先检查的条件, 你抛出一个异常.
修改调用者, 使它在调用函数之前先做检查
不要滥用异常.
网友评论