vault backup: 2022-06-21 17:06:00

Affected files:
02. PARA/03. Resources(資源)/Design Pattern.md
This commit is contained in:
2022-06-21 17:06:00 +08:00
parent 7e083574b4
commit 3b5e2312ee

View File

@@ -149,9 +149,10 @@ notify()則是當發生變化時,用來通知所有觀察者的實作。
以書上的例子來說我們多種飲料每種飲料都可以加上不同的配料。例如有奶茶、綠茶、紅茶3種飲料另外有珍珠、紅豆、綠豆、仙草4種配料我們要如何設計出適合的類別來讓每種飲料都可以隨寄的搭配配料呢
假設這樣寫:
- !!!col
- 1
### Ingredient class
Ingredient class
```cpp
class IngredientBubble { ... };
class IngredientRedbean { ... };
@@ -159,8 +160,8 @@ notify()則是當發生變化時,用來通知所有觀察者的實作。
class IngredientFairyGrass { ... };
```
- 2
### Beverage class
- 1
Beverage class
```cpp
class Beverage {
int32_t cost() { return cost; }
@@ -217,12 +218,12 @@ class IngredientBubble : public Beverage {
};
```
珍珠這個class的 constructor 的參數是任何一個 Beverage現在飲料被包在珍珠裡面由珍珠來決定飲料最後的價格是多少。現在我們可以動態的決定飲料的組成假設點一杯紅茶
珍珠這個class的 constructor 的參數是任何一個 Beverage現在飲料被包在珍珠裡面由珍珠來決定飲料最後的價格是多少。現在我們可以動態的決定飲料的組成假設點一杯紅茶,加一些配料
```cpp
int main() {
...
// 這裡就先不考慮memory leak的問題...>_<
// 為了讓程式看起來簡單,這裡就先不考慮memory leak的問題...>_<
BeverageBlackTea* berverge = new BeverageBlackTea(); // 點一杯紅茶
IngredientBubble* berverge = new IngredientBubble(berverge); // 加珍珠
IngredientRedbean* berverge = new IngredientRedbean(berverge); // 加紅豆
@@ -234,3 +235,8 @@ int main() {
}
```
可以看到第一個變數是飲料,然後被包珍珠裡面,變成珍珠紅茶,再被包到紅豆裡面,變成紅豆珍珠紅茶,再被包到仙草裡面,變成仙草紅豆珍珠紅茶,到這樣的好處是:
1. 有新的配料就寫新配料的 class
2. 因為可以動態的組合原本寫好的飲料class就不用在去動它了愈少修改愈少 bug
3. 我們可以動態的組合配料要加2份以上也沒有問題