vault backup: 2022-06-21 16:25:48
Affected files: 02. PARA/03. Resources(資源)/Design Pattern.md
This commit is contained in:
@@ -151,27 +151,46 @@ notify()則是當發生變化時,用來通知所有觀察者的實作。
|
|||||||
假設這樣寫:
|
假設這樣寫:
|
||||||
- !!!col
|
- !!!col
|
||||||
- 1
|
- 1
|
||||||
|
### Ingredient class
|
||||||
|
|
||||||
````col
|
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
Ingredients
|
class IngredientBubble { ... };
|
||||||
class BeverageMilkTea { ... };
|
class IngredientRedbean { ... };
|
||||||
class BeverageGreenTea { ... };
|
class IngredientGreenbean { ... };
|
||||||
class BeverageBlackTea {
|
class IngredientFairyGrass { ... };
|
||||||
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- 2
|
||||||
|
### Beverage class
|
||||||
```cpp
|
```cpp
|
||||||
class BeverageMilkTea { ... };
|
class BeverageMilkTea { ... };
|
||||||
class BeverageGreenTea { ... };
|
class BeverageGreenTea { ... };
|
||||||
class BeverageBlackTea {
|
class BeverageBlackTea {
|
||||||
|
IngredientBubble* bubble;
|
||||||
|
IngredientRedbean* redbean;
|
||||||
|
IngredientGreenbean* greenbean;
|
||||||
|
IngredientFairyGrass* fairyGrass;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
````
|
每個飲料的class裡面都將每個配料定義為一個member,如果客人有加配料的話,我們就將配料實例化,假設奶茶加了珍珠:
|
||||||
|
```cpp
|
||||||
|
class BeverageBlackTea {
|
||||||
|
void addBubble() {
|
||||||
|
if (!bubble) bubble = new IngredientBubble();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
要算價格的時候:
|
||||||
|
```cpp
|
||||||
|
class BeverageBlackTea {
|
||||||
|
void cost() {
|
||||||
|
if (bubble) cost += 10;
|
||||||
|
if (redbean) cost += 10;
|
||||||
|
if (greenbean) cost += 10;
|
||||||
|
if (fairyGrass) cost += 10;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
int32_t cost = 30; // 奶茶本身10元
|
||||||
|
};
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user