裝飾模式(decorator):動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生在子類更為靈活
component
是定義乙個物件介面,可以給這些物件動態地新增職責
concretecomponent
是定義乙個具體物件,也可以給這個物件新增一些職責
decorator
,裝飾抽象類,繼承了component,從外類來擴充套件component類的功能,但對於component來說,是無需知道decorator存在的.
concretedecorator
是具體的裝飾物件,起到給乙個物件裝飾a
、裝飾b
新增職責的功能// component.cs
abstract class component
// concretecomponent.cs
class concretecomponent : component
}
// decorator.cs
abstract class decorator : component
public
override
void
operation()}}
// concretedecoratora.cs
class concretedecoratora : decorator
}
// concretedecoratorb.cs
class concretedecoratorb : decorator
}
// test
component c = new concretecomponent();
concretedecoratora a = new concretedecoratora();
concretedecoratorb b = new concretedecoratorb();
a.setcomponent(c);
b.setcomponent(a);
b.operation();
總結裝飾模式是為已有功能動態地新增更多功能的一種方式// 輸出
乙個物件
裝飾a裝飾b
何時使用?
當系統需要新增新功能時,向舊類中新增新的**,這些新加的**通常裝飾了原有類的核心職責或主要行為
但
問題
在於:新加入的變數,方法或邏輯增加了主類的複雜度,但新加的這些東西可能只在某些特定情況下才會執行的特殊行為裝飾者把每個要裝飾的功能放在單獨的類中,並讓這個類包裝它所要裝飾的物件,當需要執行特殊行為時,客戶就可以在執行時根據需要有選擇地、按順序地使用裝飾功能包括物件了
優點
把類中的裝飾功能從類中搬移分離出去,可以簡化原有的類,有效的把類的核心職責和裝飾功能區分開,並且可以去除相關類中重複的裝飾邏輯,但如果裝飾順序很重要,就要注意了
c 設計模式之裝飾模式
裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該盡量使用物件組合,而不是物件繼承來擴充套件和復用...
C 設計模式之裝飾模式
動態地給乙個物件增加一些額外的職責,就增加物件的功能來說,裝飾模式比生成子類更為靈活。裝飾模式是一種物件結構模式。我們常常通過繼承的方式來對乙個既有的類進行功能新增,但繼承方式有顯著的侷限性,因為 例如在視窗控制項當中,要增加新的功能如增加滾動條,增加背景,通過繼承的方式來增加新的功能,有下面的解決...
c 設計模式之裝飾模式
裝飾器模式 動態地給乙個物件新增一些額外的工作職責,就增加功能來說,裝飾器模式比繼承的子類更靈活。裝飾模式的類結構圖 兌現 include include using namespace std class car class runcar public car public void showca...