vault backup: 2022-06-21 16:36:00
Affected files: 02. PARA/03. Resources(資源)/Design Pattern.md
This commit is contained in:
@@ -162,6 +162,11 @@ notify()則是當發生變化時,用來通知所有觀察者的實作。
|
|||||||
- 2
|
- 2
|
||||||
### Beverage class
|
### Beverage class
|
||||||
```cpp
|
```cpp
|
||||||
|
class Beverage {
|
||||||
|
int32_t cost() { return cost; }
|
||||||
|
int32_t cost;
|
||||||
|
}
|
||||||
|
|
||||||
class BeverageMilkTea { ... };
|
class BeverageMilkTea { ... };
|
||||||
class BeverageGreenTea { ... };
|
class BeverageGreenTea { ... };
|
||||||
class BeverageBlackTea {
|
class BeverageBlackTea {
|
||||||
@@ -184,13 +189,15 @@ class BeverageBlackTea {
|
|||||||
要算價格的時候:
|
要算價格的時候:
|
||||||
```cpp
|
```cpp
|
||||||
class BeverageBlackTea {
|
class BeverageBlackTea {
|
||||||
void cost() {
|
int32_t cost() {
|
||||||
if (bubble) cost += 10;
|
if (bubble) cost += 10; // 珍珠要加10元
|
||||||
if (redbean) cost += 10;
|
if (redbean) cost += 5; // 紅豆要加10元
|
||||||
if (greenbean) cost += 10;
|
if (greenbean) cost += 7; // 綠豆要加10元
|
||||||
if (fairyGrass) cost += 10;
|
if (fairyGrass) cost += 9; // 珍珠要加10元
|
||||||
|
return cost;
|
||||||
}
|
}
|
||||||
private:
|
|
||||||
int32_t cost = 30; // 奶茶本身10元
|
int32_t cost = 30; // 奶茶本身10元
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
這樣的問題是,每當有一種新配料出現,我們就要在奶茶類別裡修改至少2個function,addXXX()與cost(),目前我們有3種飲料,所以要修改6個function,更何況,如果客人要加2份珍珠怎麼辦?這明顯不利程式的維護,必須有一種方法讓程式的修改最小,讓寫好的程式不用被修改才行。
|
||||||
Reference in New Issue
Block a user