第8章 重新组织数据(暂略)

自封装字段(Self Encapsulate Field)

其实现在有了Spring框架,支持插件lombok,直接添加注释@Data即可完成封装

(略...)

 

以对象取代数据值(Replace Data Value with Object)

其实就是我们平时常用的手法,即将类中散落的数据封装成一个自定义类型的数据,举个例子:

如果一个类里需要数据值有水果品种,单价,重量,总金额,那么就把这四个数据封装成一个类就好。

 

将值对象改为引用对象(Change Value to Reference)

1.动机:

当一个类衍生出许多相等的实体时,你希望将它们替换成单一对象,就将这个实体对象变成一个引用对象。

2.区分:

实体和引用,一个类能实例出很多不同的实体对象,而引用是实例出一个后,以后再调用这个类就直接等于了之前实例出的那个对象(指向了最初的实例对象)。

 

将引用对象改为值对象(Change Reference to Value)

1.动机:

你有一个引用对象,很小且不可变,而且不易管理,将它变成一个值对象。

略。。

 

以对象取代数组(Replace Array with Object)

1.动机:

你有一个数组,其中的元素各自表示不同的东西,那么就以对象替换数组,对于数组中的每个元素,以一个字段来表示。

 

复制“被监视数据”(Duplicate Observed Data)

略。。

 

将单向关联改为双向关联(Change Unidirectional Association to Bidirectional)

略。。

 

将双向关联改为单向关联(Change Bidirectional Association to Unidirectional)

略。。

 

以字面常量取代魔法值(Replace Magic Number with Symbolic Contant)

1.概念:

创造一个常量,根据其意义为它命名,并将上述的字面数值替换为这个常量。

2.举例:

static final double AMOUNT = 9.99;

3.造成的坏味道:

一旦这个数字修改,就要将所有地方引用到这个数字的地方修改一遍,多以换成常量很有必要。

 

封装字段(Encapsulate Field)

1.概念:

你的类中存在一个public字段,将它声明为private,并提供相应的访问函数。

2.动机:

数据隐藏。

 

封装集合(Encapsulate Collection)

1.概念:

有个函数返回一个集合,让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数。

2.动机:

我们通常会在一个类中使用集合(collection, array, list...)来保存一组实例,这样的类通常也会提供针对集合的取值/设置函数。但集合的处理方式和其他种类的数据略有不同,取值函数不该返回集合自身,因为这会让用户得以修改集合内容而集合拥有者却一无所知,也会暴露过多对象内部数据结构的信息,所以一是需要隐藏对象内与用户无关的数据结构,二是应该为集合添加/移除元素的函数。

略。。

 

以数据类取代记录(Replace Record with Data Class)

1.概念:

你需要面对传统编程环境中的结构记录,为该记录创建一个“哑”数据对象。

略。。

 

以类取代类型码(Replace Type Code with Class)

略。。

 

以子类取代类型码(Replace Type Code with Subclasses)

 

以State/Strategy取代类型码(Replace Type Code with State/Strategy)

 

以字段取代子类(Replace Subclass with Fields)

 

posted @ 2020-08-25 17:12  pmingup9012  阅读(93)  评论(0编辑  收藏  举报