继续整理下第七章的内容, 关于对象属性的迁移。
1. 迁移函数
当某个函数与其不所属类有着更密切的关系时,考虑把该函数移到新类中,在新类中建立一个有着类似行为的函数,移除就函数,或者将旧函数变成一个单纯的委托函数。这样做的目的是减少类间的耦合,保证类更简单。
2. 迁移字段
跟第一条类似,如果类的某个成员被另一个类更加频繁的使用,则考虑移到另一个类中,注意这里的使用不一定是直接使用,也有可能是通过取值设值函数访问该属性。
3. 提取类
某个类做了应该由两个类做的事,那么将该类拆分成两个类,拆开相应的属性和方法,原因是一个类应该是一个清楚的抽象,类在持续开发的过程中,会不断的加入新的属性和方法,难免会把本不属于该类的职责加入到其中。
4. 将类内敛话
某个类所做的事情太少,则把它合并到现有的某个类中,这通常是因为之前的重构动作移走了这个类的职责。
5. 隐藏委托关系
客户端通过一个委托来调用另一个对象,在服务类上建立客户端所需的所有函数,用已隐藏委托关系,即如果某个客户端先通过服务对象的字段得到另一个对象,然后调用后者的函数,那么客户端必须知晓这一层委托关系,万一委托关系发生变化,客户也得到相应变化。可以在服务对象上放置一个简单的委托函数,将委托关系隐藏起来,除去这种依赖。也就是将这种调用关系client.service.other.method(),加上一层包装:client.service.method(),其中service的method()中调用other.method()。
6. 移除中间人
某个类做了过多的简单委托动作,让客户端直接调用受托类。
7. 引入外加函数
你需要为提供服务的类增加一个函数,但有无法修改这个类,那么,在客户端类中建立一个函数,并以第一参数的形式传入一个服务类实例。
8. 引入本地扩展
需要为服务类提供一些额外的函数,但该类无法修改,可以新建一个类,是它包含这些额外的函数,让这个扩展品成为源类的子类或者包装类。