8.1 自封装字段 为字段建立取值和设值函数,类似get_val(),set_val;
8.2 以对象取代数据值 将一些有关联的字段放在一个类或者结构体里 便于管理
8.3 将值对象改为引用对象 根据对象是否可变,大小来决定
8.4 将引用对象改为值对象 同上
8.5 以对象取代数组 当数组中的元素代表不同的东西,选择用一个对象来取代
8.6 复制“被监视数据” 当有些数据在GUI控件中,而领域函数需要访问这些数据,我们可以把数据复制到一个领域对象中,建立一个Observer模式,用以同步领域对象和GUI对象内的重复数据
良好的系统:将处理用户界面和处理业务逻辑的代码分开
8.7 将单向关联改为双向关联 当两个类都需要使用对方特性,但其间只有一个单向连接,我们可以添加一个反向指针,并使修改函数能够同时更新两条连接。做法:在被引用类中增加一个字段保存反向指针,决定哪个类控制关联关系,在被控端建立函数来负责更新反向指针
8.8 将双向关联改为单向关联 去掉不必要的关联
8.9 以字面常量代替魔法数 创建一个有意义的常量来代替数字
8.10 封装字段 对于类中pubic的字段,将其声明为private,并提供相应的访问函数和更新设值函数
8.11 封装集合 当函数返回集合,修改为函数返回该集合的一个可读副本,并在这个类中提供添加/移除集合元素的函数
8.12 用数据类取代记录 对于一些传统记录,可以新建数据类来存储,并提供相应的函数进行取值和设置值
8.13 以类取代类型码 将类中的数值码代替为类,目的增加可读性
8.14 以子类取代类型码 当类型码不可变且影响类的行为,采用子类取代这个类型码。
8.15 以state/strategy取代类型码 类型码影响了类的行为且无法通过继承手法消除它,采用状态对象取代类型码,目的也是为了增加可读性
8.16 以字段取代子类 当各个子类的差别是“返回常量数据”的函数身上,修改为将这些函数返回超类的字段,销毁子类。
8.16