裝飾模式(decorator)描述:以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案
使用場景:
1、擴充套件乙個類的功能,或給乙個類增加附加功能
2、動態的給物件增加或刪除功能
3、動態增加一組基本功能,自由組合重複使用這一組功能
組織結構:
1、抽象構件:抽象介面,作用是規範準備接收附加功能的物件
2、具體構件:準備接收附加功能的物件,繼承抽象構件
3、抽象裝飾:持有乙個具體構件物件的例項,並定義乙個與抽象構件一致的介面(也可以繼承於抽象構件)
4、具體裝飾:實現附加功能的物件,繼承抽象裝飾
類關係圖如下所示:
主要是通過operaterdecorator這個抽象類 中的物件組合來啟動原有的base.work()方法,其次是執行額外增加的功能。這個物件可以多次被包裝,使實現的功能動態的增加(而使用繼承的話,子類相應的會大量增加,因此不建議採用繼承來解決此類問題);
額外增加的功能類**如下:
1using
system;
2using
system.collections.generic;
3using
system.text;45
namespace
decoratorpatternsam
616
17public
override
voidwork()
18
22}23
}2425using
system;
26using
system.collections.generic;
27using
system.text;
2829
namespace
decoratorpatternsam
3037
public
override
void
work()
38
4243
private
void
addedworkmethoda()
4448}49
}5051
客戶端**通過包裝物件實現相應的功能:
1using
system;
2using
system.collections.generic;
3using
system.text;45
namespace
decoratorpatternsam624
}25}26
顯示結果如下,將額外的方法增加了進去:
裝飾模式(Decorator Pattern)
裝飾模式 decorator pattern 一句話 繼承乙個抽象類,加上自己的特點,然後再使自己也變成抽象類,然後讓子類繼承的模式,叫裝飾模式。意圖 動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator 模式相比生成子類更為靈活。結構圖 生活中的例子 我們還是拿咖啡來舉例子,現在...
裝飾模式(Decorator Pattern)
裝飾模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。concretecomponent具體構件角色 真實物件 decorator裝飾角色 concrete...
裝飾模式(Decorator Pattern)
裝飾模式 decorator pattern 一句話 繼承乙個抽象類,加上自己的特點,然後再使自己也變成抽象類,然後讓子類繼承的模式,叫裝飾模式。意圖 動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活。結構圖 生活中的例子 我們還是拿咖啡來舉例子,現在有...