vault backup: 2022-06-21 16:36:00

Affected files:
02. PARA/03. Resources(資源)/Design Pattern.md
This commit is contained in:
2022-06-21 16:36:00 +08:00
parent 2abf3ae24a
commit 5f86679158

View File

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