From 5f86679158c13bd5636bb73d6cdb669d63ab85c1 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 21 Jun 2022 16:36:00 +0800 Subject: [PATCH] vault backup: 2022-06-21 16:36:00 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Affected files: 02. PARA/03. Resources(資源)/Design Pattern.md --- .../03. Resources(資源)/Design Pattern.md | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/02. PARA/03. Resources(資源)/Design Pattern.md b/02. PARA/03. Resources(資源)/Design Pattern.md index c822e15..3845fed 100644 --- a/02. PARA/03. Resources(資源)/Design Pattern.md +++ b/02. PARA/03. Resources(資源)/Design Pattern.md @@ -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元 }; -``` \ No newline at end of file +``` + +這樣的問題是,每當有一種新配料出現,我們就要在奶茶類別裡修改至少2個function,addXXX()與cost(),目前我們有3種飲料,所以要修改6個function,更何況,如果客人要加2份珍珠怎麼辦?這明顯不利程式的維護,必須有一種方法讓程式的修改最小,讓寫好的程式不用被修改才行。 \ No newline at end of file