【马云有1500亿。中国有13亿人 他每人发一亿 他还有1487亿 这样他还是中国首富 全中国都是亿万富豪。我要不是数学系的都看不出里面的道道】
项目中如何重新组织数据???
以下来自《重构》这本书的读书笔记,欢迎留下宝贵意见。
Self Encapsulate Field(自封装字段)
你直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙。为这个字段建立取值/设值函数,并且只以这些函数来访问字段。
争论:
直接取值还是间接取值:作者的观点是间接取值。
Replace Data Value with Object(以对象取代数据值)
你有一个数据项,需要与其他数据和行为一起使用才有意义。将数据项变成对象。
Change Value to Reference(将值对象改为引用对象)
你从一个人类衍生出许多彼此相等的实例,希望将它们替换为同一个对象。将这个值对象变成引用对象。
Change Reference to Value(将引用对象改为值对象)
你有一个引用对象,很小且不可变,而且不易管理,将它变成一个值对象。
Replace Array with Object(以对象取代数组)
你有一个数组,其中的元素各自代表不同的东西。以对象替换数组。对于数组中的每一个元素,以一个字段来表示。
重构前:
String[] gifts = new String[3];
gifts[0] = "flower";
gifts[1] = "Say love";
gifts[2] = "Call";
重构后:
Gift gift = new Gift();
gift.setFlower(999);
gift.setSayWord("Love you");
gift.setCall("good Night");
Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)
两个类都需要使用对方特性,但其间只有一条单线连接,添加一个反向指针,并修改函数,使能够同时更新两条连接。
//两人彼此相爱时,心里都有对方
class Boy{
//心爱的女孩
Girl girl;
}
class Girl{
//心爱的男孩
Boy boy;
}
Change Bidirectional Association to Unidiredtional(将双向关联改为单向关联)
两个类之间有双向关联,但其中一个类如今不再需要另一个类的特性。去除双向关联。
//女孩不喜欢男孩了
class Boy{
Girl girl;
}
class Girl{
//我们分手吧!
//Boy boy;
}
Replace Magic Number with Symbolic Constant(以字面常量取代魔法数)
你有一个字面数值,带有特别含义。创造一个残联,根据其意义为它命名,并将上述的字面数值替换为这个常量。
重构前
public boolean testLove(){
return 999 * flowerNumber > 99999;
}
重构后
//这里的常量要放在离函数近的地方
public static int DAYS = 999;
public boolean testLove(){
return DAYS * flowerNumber > 99999;
}
Encapsulate Field(封装字段)
你的类中存在一个public字段,将它声明为private,并提供相应的访问函数。(就是我们所说的set,get方法)
重构前
private String flowerNum
重构后
private String flowerNumber;
public String getFlowerNumber() {
return flowerNumber;
}
public void setFlowerNumber(String flowerNumber) {
this.flowerNumber = flowerNumber;
}
Encapsulate Collection(封装集合)
有个函数返回一个集合,让这个函数返回该集合的一个只读副本,并在这个类中提供添加/移除集合元素的函数。(具体可以看书本例子)
Replace Type Code with Class(以类取代类型码)
类之中有一个数值类型码,但它并不影响类的行为,以一个新的类替换该数值类型码。(具体可以看书本例子)
Replac Type Code with Subclasses(以子类取代类型码)
你有一个不可变的类型码,它会影响类的行为,以子类取代这个类型码。(具体可以看书本例子)
Replace Type Code with State/Strategy(以State/Strategy)取代类型码
你有一个类型码,它会影响类的行为,但你无法通过继承手法消除它,以状态对象取代类型码。(具体可以看书本例子)
Replace Subclass with Fields(以字段取代子类)
你的各个子类的唯一差别只在,”返回产量数据”的函数身上。修改这些函数,使它们返回超类中的某个新增字段,然后销毁之类。(具体可以看书本例子)
来自亦舒《花解语》
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!