diff --git a/notes/重构.md b/notes/重构.md index 21591bd6..19beeef3 100644 --- a/notes/重构.md +++ b/notes/重构.md @@ -668,7 +668,7 @@ Hide Delegate 有很大好处,但是它的代价是:每当客户要使用受 将该数据赋值到一个领域对象中,建立一个 Oberver 模式,用以同步领域对象和 GUI 对象内的重复数据。 -

+

## 7. 将单向关联改为双向关联 @@ -739,7 +739,7 @@ public 字段应当改为 private,并提供相应的访问函数。 类中有一个数值类型码,但它并不影响类的行为,就用一个新类替换该数值类型码。如果类型码出现在 switch 语句中,需要使用 Replace Conditional with Polymorphism 去掉 switch,首先必须运用 Replace Type Code with Subcalss 或 Replace Type Code with State/Strategy 去掉类型码。 -

+

## 14. 以子类取代类型码 @@ -747,7 +747,7 @@ public 字段应当改为 private,并提供相应的访问函数。 有一个不可变的类型码,它会影响类的行为,以子类取代这个类型码。 -

+

## 15. 以 State/Strategy 取代类型码 @@ -757,7 +757,7 @@ public 字段应当改为 private,并提供相应的访问函数。 和 Replace Type Code with Subcalsses 的区别是 Replace Type Code with State/Strategy 的类型码是动态可变的,前者通过继承的方式来实现,后者通过组合的方式来实现。因为类型码可变,如果通过继承的方式,一旦一个对象的类型码改变,那么就要改变用新的对象来取代旧对象,而客户端难以改变新的对象。但是通过组合的方式,改变引用的状态类是很容易的。 -

+

## 16. 以字段取代子类 @@ -765,7 +765,7 @@ public 字段应当改为 private,并提供相应的访问函数。 各个子类的唯一差别只在“返回常量数据”的函数上。 -

+

# 八、简化条件表达式 @@ -897,7 +897,8 @@ double getSpeed() { } ``` -

+

+ ## 7. 引入 Null 对象 @@ -1059,7 +1060,7 @@ double finalPrice = discountedPrice (basePrice); 以一个对象取代这些参数。 -

+

## 10. 移除设值函数