裝飾者 Decorator 模式

2021-09-16 19:50:48 字數 1203 閱讀 5424

常用在為已經定義好的類新增新的職責(操作),通常我們會定義乙個新類繼承自定義好的類,隨之而來的問題是當具體子類要新增新的職責時,就要向其父類新增這個職責的抽象介面,這樣當子類越多,其父類的抽象介面越多,而且繼承自這個父類的所有子類都不可避免的繼承了父類的介面。decorator模式提供了一種解決方法,當新增操作時一步步的新增新的職責。

舉個栗子:手機的主要功能是上網web,現在手機公升級,我需要加入打**call功能。我們將其抽象到基類function中,為了以後同類問題的可擴充套件,將web等附加功能抽象成decorator,decorator派生自function,其內部卻有著依附的主體功能function *pmain_.

如此,我們將可以新職責一層層的新增進去,我們將類的裝飾功能從類中剝離出去,以簡化原有的類。我們甚至同過不同的裝飾次序,來改變類的行為。

可以有效地將核心職責與裝飾功功能區分開來,並且抽象出了重複的裝飾邏輯。

#include

#ifndef _design_pattern_decorator_decorator_hpp_

#define _design_pattern_decorator_decorator_hpp_

namespace design_pattern

virtual

void

operation()

=0;}

;class

call

:public function};

class

decorator

:public function

virtual

void

operation()

=0;}

;class

web:

public decorator};

}#endif

// !_design_pattern_decorator_decorator_hpp_

// decorator_main.cpp

#include

"decorator.hpp"

using

namespace design_pattern;

intmain()

裝飾者模式decorator

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

裝飾者(Decorator)模式

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

裝飾者模式 Decorator

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