抽象構件角色(component):給出乙個抽象介面,以規範準備接收附加責任的物件。
具體構件角色(concrete component):定義乙個將要接收附加責任的類。
裝飾角色(decorator):持有乙個構件(component)物件的引用,並定義乙個與抽象構件介面一致的介面。
具體裝飾角色(concrete decorator):負責給構件物件「貼上」附加的責任。
抽象構件角色
public
inte***ce component
具體構件角色
public
class
concretecomponent
implements
component}
裝飾角色
public
class
decorator
implements
component
@override
public
void
dosomething() }
具體裝飾角色
//具體裝飾角色1
public
class
concretedecorator
extends
decorator
@override
public
void
dosomething()
private
void
doanotherthing()
}//具體裝飾角色2
public
class
concretedecorator1
extends
decorator
@override
public
void
dosomething()
private
void
doanotherthing()
}
客戶端實現
public
class client
}
執行結果如下:
function a
function b
function c
---------------
function a
function b
function c
設計模式學習總結 8 裝飾模式
8.裝飾模式 意圖 動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活。主要解決 一般的,我們為了擴充套件乙個類經常使用繼承方式實現,由於繼承為類引入靜態特徵,並且隨著擴充套件功能的增多,子類會很膨脹 什麼時候使用 在不想增加很多子類的情況下擴充套件類 如...
設計模式總結 裝飾模式
當需要在主類中加入新的字段,方法或邏輯,而它們只是在某種特定情況下才會用到時,可以使用這個模式。該模式可以把核心職責與裝飾功能區分開,對 增加功能 來說比較靈活。舉個栗子,需要在玩家類當中新增 穿戴襪子 穿戴鞋子 的功能 1.建立 player類,並定義 show 方法。2.定義服飾類 finery...
設計模式學習 裝飾模式
看完了幾個原則後,我又開始看裝飾模式,將一些裝飾用的方法從主類中分離,並且將具體的裝飾步驟隔離開了,使得主類更加的簡便。這樣做的最大好處就是,有效的把類的核心職責和裝飾功能區分開了,而且可以去除相關類中重複的裝飾邏輯。include include using namespace std class...