目录
- SelfEncapsulateField(自封装字段)
- ReplaceDataValuewithObject(以对象取代数据值)
- ChangeValuetoReference(将值对象改为引用对象)
- ChangeReferencetoValue(将引用对象改为值对象)
- ReplaceArraywithObject(以对象取代数组)
- ChangeUnidirectionalAssociationtoBidirectional(将单向关联改为双向关联)
- ChangeBidirectionalAssociationtoUnidirectional(将双向关联改为单向关联)
- EncapsulateCollection(封装集合)
- ReplaceRecordwithDataClass(以数据类取代记录)
- ReplaceTypeCodewithClass(以类取代类型码)
- ReplaceSubclasswithFields(以字段取代子类)
重新组织数据
自封装字段
- 直接访问一个字段,会导致字段之间的的耦合关系过于笨拙。为字段建立取值/设值函数,并且只以这些函数来访问字段
以对象取代数据值
- 当数据开始变得复杂,操作数据的操作开始变多,就会变成这样
- 为替代数值新建一个类,在其中声明一个final字段,其类型和源类中的替换数据类型一样。然后在新类中加入这个字段的取值函数,再加上一个此字段的构造函数
将值对象改为引用对象
- 从一个类衍生出许多彼此相等的实例,希望将它们替换为同一个对象。将这个值对象变成引用对象。
- 对任何一个对象的修改都能影响到所有引用此一对象的地方。这时候需要将对象变成一个引用对象。
将引用对象改为值对象
- 有一个引用对象,很小且不变,而且不易管理。将它变成一个值对象。
以对象取代数组
- 数组应该是用来组织容纳一组相似的对象。如果数组里容纳的对象的意义不同,那么会给带来很臭的味道
- 数组的各个元素各自代表的意义不同。以对象替换数组,对于数组中的每个元素,以一个字段来表示
将单向关联改为双向关联
- 被引用类需要得到其引用者以便进行某些处理。这时候就加入了反向指针
将双向关联改为单向关联
- 大量双向连接很容易造成“僵尸对象”;此外双向关联也迫使连个类之间有了依赖。
封装集合
- 让返回集合的函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数
以数据类取代记录
- 总有可能遇到记录格式,那么就把记录转换位类
以类取代类型码
- 类似 枚举取代Int数值这样的
以字段取代子类
- 建立子类的目的,是为了增加新特性或变化其行为,子类中只有常量函数,实在没有足够的存在价值。
- 在超类中实现所有常量函数,令它们返回相应的字段,然后将函数从子类中删掉。
网友评论