From 4527580a0deb1ceaf8b663cbea50b60a57084971 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Tue, 21 Jun 2022 16:15:49 +0800 Subject: [PATCH] vault backup: 2022-06-21 16:15:48 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 | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/02. PARA/03. Resources(資源)/Design Pattern.md b/02. PARA/03. Resources(資源)/Design Pattern.md index df078f9..f9b5a62 100644 --- a/02. PARA/03. Resources(資源)/Design Pattern.md +++ b/02. PARA/03. Resources(資源)/Design Pattern.md @@ -144,4 +144,34 @@ notify()則是當發生變化時,用來通知所有觀察者的實作。 觀察者方面必須實作 update() 才能收到通知。 ## 裝飾者模式(Decorator Pattern) -由「裝飾者」 \ No newline at end of file +「裝飾者」通常與「被裝飾者」有同樣的界面,「裝飾者」會取代「被裝飾者」的界面,進而改變「被裝飾者」的行為。 +裝飾者模式讓物件可以動態的改變行為,進為符合不同的需求。 +以書上的例子來說,我們多種飲料,每種飲料都可以加上不同的配料。例如,有奶茶、綠茶、紅茶3種飲料,另外有珍珠、紅豆、綠豆、仙草4種配料,我們要如何設計出適合的類別來讓每種飲料都可以隨寄的搭配配料呢? + +假設這樣寫: +- !!!col + - 1 + + +````col + +```cpp +Ingredients +class BeverageMilkTea { ... }; +class BeverageGreenTea { ... }; +class BeverageBlackTea { + +} +``` + + +```cpp +class BeverageMilkTea { ... }; +class BeverageGreenTea { ... }; +class BeverageBlackTea { + +} +``` + +```` +