裝飾者模式 Decorator 的c 實現示例

2021-04-14 00:49:22 字數 855 閱讀 5509

水平有限,請多指正!

裝飾者模式(decorator)示例

例子改編自《設計者模式解析(第二版)》214頁,人民郵電出版社

意圖:動態的給乙個物件新增職責;即提供了「即插即用」方法,不用

重新編譯已有部分。

問題:要使用的物件將執行所需的基本功能。但是,可能需要為這個對

像新增某些功能,這些附加的功能可能發生在物件的基本功能之

前或之後。

解決方案:可以無需建立子類而擴充套件乙個物件的功能

優點:類的層次結構大小和複雜度有了很大程度的降低

缺點:

1)如果裝飾者本身是被裝飾的,那麼訪問裝飾模式中引進的特性

將是非常困難的甚至是危險的。

2)系統對裝飾者的使用順序是敏感的。(這個也應算優點,順序靈活 2023年7月加)

附:顯然,如果要更改被裝飾者的基本功能的情況是不能用裝飾者模式

的。

[1]《設計者模式解析(第二版)》,人民郵電出版社,alan shalloway等著,徐言生譯

[2]《設計模式初學者指南》,機械工業出版社,allen holub著,徐迎曉譯

對示例的描述:

1)具體元件salesticket(即被裝飾者)實現基本功能(即列印票據正文),需

要給它加個表頭和表尾,於是用兩個具體裝飾類header和footer完成附加功能。

2)例子改編自參考文獻[1],不明白可以看。

3)使用編譯器vc6.0通過。

裝飾者模式decorator

設計原則 開放 關閉原則,對擴充套件開放,對修改封閉 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合設計而努力 類圖待補充 示例 飲料銷售系統 主體飲料 coffe 輔助調料 mocha,soy,whip。輔助調料價位都不一樣,當輔助調料和主飲料不同搭配時,最終飲料...

裝飾者(Decorator)模式

裝飾者模式是允許向乙個新物件新增新的功能,但又不改變其結構。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。就增加功能來說,裝飾器模式相比生成子類更為靈活。例子 如果我們去咖啡店,有一種咖啡,該咖啡可以加糖,牛奶,奶泡等等,如果我們需要加糖和牛奶,常規...

裝飾者模式 Decorator

1 作用 動態的給物件增加執行的業務,不受數量限制。可以代替子類,同時避免子類與父類的高耦合。增加靈活性。2 構成 2.1 裝飾者抽象類 decorator 可以是介面 最終生成乙個指向被裝飾物件基類 component 例項的引用,並定義乙個與被裝飾物件基類 component 介面一致的介面。通...