1、Move Method 搬移函数
有个函数语气所住类之外的另一个类进行更多交流
做法:
检查源类中被源函数所使用的一切特性(包括字段和函数),考虑他们是否也该被搬移
检查源类的子类和超类,看看是否有该函数的其他声明
在目标类中声明这个函数
将源函数的代码复制到目标函数中,调整后者,使其能在新家中正常运行
编译目标类
决定如何从源函数正确应用目标对象
修改源函数,使之成为一个纯委托函数
编译测试
决定是否删除源函数,或将它当做一个委托函数保留下来
如果要移除源函数,请将源类中对源函数的所有调用,替换为对目标函数的调用
编译测试
2、Move Field 搬移字段
你的程序中,某个字段被其所住之外的另一个类更多的用到
做法:
如果字段的访问级是public,使用Encapsulate Field将它封装起来
编译测试
在目标类中建立与源字段相同的字段,并同时建立相应的设值/取值函数
编译目标类
决定如何在源对象中引用目标对象
删除源字段
将所有对源字段的引用替换为对某个目标函数的调用
编译测试
3、Extract Class 提炼类
某个类做了应该由两个类做的事
做法:
决定如何分解类所负的责任
建立一个新类,用以表现从旧类中分离出来的责任
建立“从旧类访问新类”的连接关系
对于你想搬移的每一个字段,运用Move Field搬移之
每次搬移后,编译测试
使用Move Method将必要函数搬移到新类。先搬移入扇大于出扇的函数
每次搬移之后,编译测试
检查,精简每个类
决定是否公开新类
4、 Inline Class 将类内联化
某个类没有做太多事情
做法:
在目标类身上声明源类的public协议,并将其中所有函数委托至源类
修改所有源类引用点,改而引用目标类
编译测试
运用Move Method和Move Field 将源类的特性全部搬移到目标类
为源类举行一个简单的“丧礼”
5、Hide Delegate 隐藏“委托关系”
客户通过一个委托关系来调用另一个对象
做法:
对于每一个委托关系中的函数,在服务对象端建立一个简单的委托函数
调整客户,令它只调用服务对象提供的函数
每次调整后,编译并测试
如果将来不再有任何客户需要取用受托类,便可移除服务对象中的相关访问函数
编译测试
6、Remove Middle Man 移除中间人
某个类做了过多的简单委托动作
做法:
建立一个函数,用以获得受托对象
对于每个委托函数,在服务类中删除该函数,并让需要调用该函数的客户转为调用受托对象
处理每个委托函数后,编译测试
7、Introduce Foreign Method 引入外加函数
你需要为提供服务的类增加一个函数,但你无法修改这个类
8、Introduce Local Extension 引入本地扩展
同7,做法有两种,extends 原函数,或者提供包装类