vault backup: 2022-06-21 17:16:00
Affected files: 02. PARA/03. Resources(資源)/Design Pattern.md
This commit is contained in:
@@ -149,10 +149,9 @@ notify()則是當發生變化時,用來通知所有觀察者的實作。
|
||||
以書上的例子來說,我們多種飲料,每種飲料都可以加上不同的配料。例如,有奶茶、綠茶、紅茶3種飲料,另外有珍珠、紅豆、綠豆、仙草4種配料,我們要如何設計出適合的類別來讓每種飲料都可以隨寄的搭配配料呢?
|
||||
|
||||
假設這樣寫:
|
||||
|
||||
- !!!col
|
||||
- 1
|
||||
Ingredient class
|
||||
### Ingredient class
|
||||
```cpp
|
||||
class IngredientBubble { ... };
|
||||
class IngredientRedbean { ... };
|
||||
@@ -161,7 +160,7 @@ notify()則是當發生變化時,用來通知所有觀察者的實作。
|
||||
```
|
||||
|
||||
- 1
|
||||
Beverage class
|
||||
### Beverage class
|
||||
```cpp
|
||||
class Beverage {
|
||||
int32_t cost() { return cost; }
|
||||
@@ -201,9 +200,9 @@ class BeverageBlackTea {
|
||||
};
|
||||
```
|
||||
|
||||
這樣的問題是,每當有一種新配料出現,我們就要在奶茶類別裡修改至少2個function,addXXX()與cost(),目前我們有3種飲料,所以要修改6個function,更何況,如果客人要加2份珍珠怎麼辦?這明顯不利程式的維護,必須有一種方法讓程式的修改最小,讓寫好的程式不用被修改才行。
|
||||
這樣的問題是,每當有一種新配料出現,我們就要在奶茶類別裡修改至少2個 function:`addXXX()` 與 `cost()`,目前我們有3種飲料,所以要修改6個 function,更何況,如果客人要加2份珍珠怎麼辦?這明顯不利程式的維護,必須有一種方法讓程式的修改最小,讓寫好的程式不用被修改才行。
|
||||
|
||||
讓裝飾者模式來改善這個問題。首先讓配料跟飲料有同樣的界面,但是修改一下配料的 constructor,當然也要實作cost(),畢竟每個配料的價格不同:
|
||||
讓裝飾者模式來改善這個問題。首先讓配料跟飲料有同樣的界面,但是修改一下配料的 constructor,當然也要實作 `cost()`,畢竟每個配料的價格不同:
|
||||
```cpp
|
||||
class IngredientBubble : public Beverage {
|
||||
IngredientBubble(Beverage* beverage) {
|
||||
@@ -239,4 +238,3 @@ int main() {
|
||||
1. 有新的配料就寫新配料的 class
|
||||
2. 因為可以動態的組合,原本寫好的飲料 class 就不用在去動它了,愈少修改,愈少 bug
|
||||
3. 我們可以動態的組合配料,要加2份以上也沒有問題
|
||||
|
||||
|
||||
Reference in New Issue
Block a user