設計模式C 實現 裝飾者模式

2021-09-25 04:49:07 字數 2434 閱讀 9972

裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。

裝飾者和被裝飾者有同樣的超累型別。

能夠用乙個或多個裝飾者包裝乙個物件。

既然裝飾者和被裝飾者物件有同樣的超累型別,所以在不論什麼須要原始物件(被包裝的)的場合,能夠用裝飾過的物件取代它。

裝飾者能夠託付被裝飾者的行為之前與或之後,加上自己的行為,以達到特定的目的。

物件能夠在不論什麼時候被裝飾,所以能夠在執行時動態地、不限量地用你喜歡的裝飾者來裝飾物件。

購買咖啡時,能夠在當中增加各種調料,例如:蒸奶(steamed milk)。豆漿(soy)。摩卡(mocha)或覆蓋奶泡。

咖啡館會依據所增加的調料收取不同的費用。

解決方法:我們以飲料為主體。然後在執行時以調料來裝飾飲料。例如說顧客想要摩卡和奶泡深焙咖啡。那麼,要做的是:拿乙個深焙咖啡(darkroast)物件,以摩卡(mocha)物件裝飾它。以奶泡物件裝飾它,呼叫cost()方法。並依賴託付將調料的價錢加上去。

執行結果:

espresso$1.99

espresso,mocha, mocha $2.39

espresso,mocha, mocha, whip $2.54

請按隨意鍵繼續. . .

這樣就能夠是不同飲料增加不同的配料,而不用改動原始碼。而且能夠增加新的配料型別和飲料型別。

設計原則

5:類應該對外擴充套件。對改動關閉。如裝飾者模式中,我們的目標是同意類easy擴充套件,在不改動現有**的情況下。就可搭配新的行為。

參考:head first設計模式

設計模式之裝飾者模式C 實現

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

設計模式的 C 實現 裝飾者模式

前文回顧 單例模式 一 單例模式 二 觀察者模式 簡單工廠模式 工廠方法模式 一 工廠方法模式 二 抽象工廠模式 一 抽象工廠模式 二 原型模式 外觀模式 中介者模式 模式 裝飾者模式的本質和 模式的原理是一樣的,體現了對乙個既有類進行擴充套件是的原則 除非有更好的理由採用繼承的方式 有虛函式需要重...

C 實現設計模式之裝飾者模式詳解

目錄 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者模式提供了比繼承更有彈性的替代方案。裝飾者模式遵循的設計原則 類應該對擴充套件開放,對修改關閉。裝飾者模式中的類如下圖,c 設計模式之裝飾模式 其中component抽象元件類,即被裝飾的類,每個元件都可以單獨使用,或者被裝飾者包起來...