Net設計模式例項之裝飾者模式(Decorator Pattern)
一、裝飾模式簡介(Brief Introduction)
動態地給一個物件新增一些額外的職責。
優點:把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類。有效地把類的核心功能和裝飾功能區分開了。
二、解決的問題(What To Solve)
已經開發完畢的物件,後期由於業務需要,對舊的物件需要擴充套件特別多的功能,這時候使用給物件動態地新增新的狀態或者行為(即裝飾模式)方法,而不是使用子類靜態繼承。
比如,剛買一輛汽車如下圖
此汽車不符合你的個性要求,比如外表不夠美觀,發動機馬力不足,不能滿足你的速度激情,於是你需要對汽車的外表進行裝飾,同時需要提高發動機的效能。這些操作通過裝飾模式就能很好地解決問題。最終得到如下圖所示的個性汽車。
三、裝飾模式分析(Analysis)
1、裝飾模式結構
Component定義了一個物件介面,可以給這些物件動態地新增職責。
ComcreteComponent定了一個具體的物件,也可以給這個具體的物件新增職責。
Decorator抽象裝飾類,繼承了Component物件介面,從外類擴充套件Component類的功能,但對於Component來說,是無需知道Decorator的存在。
ConcreteDecoratorA具體的裝飾物件,起到給Component新增職責的功能。
ConcreteDecoratorB具體的裝飾物件,起到給Component新增職責的功能。
2、原始碼
1、物件介面Component.cs |
public abstract class Component { public abstract void Operation(); } |
2、實現類ConcreteComponent.cs 繼承於Component介面 |
public class ConcreteComponent : Component { public override void Operation() { Console.WriteLine("開始執行具體的物件..."); } } |
3、裝飾抽象類Decorator.cs 繼承於Component介面 |
public abstract class Decorator : Component { private Component m_Component;
public void SetComponent(Component component) { this.m_Component = component; }
public override void Operation() { if (m_Component != null) { m_Component.Operation(); } } } |
4、具體的裝飾物件ConcreteDecoratorA.cs 繼承於Decorator抽象類 |
public class ConcreteDecoratorA : Decorator { private string addedState; public override void Operation() { base.Operation(); addedState = "進行了狀態屬性裝飾。"; Console.WriteLine(addedState); } } |
給物件介面Component新增了狀態屬性addedState |
5、具體的裝飾物件ConcreteDecoratorB.cs 繼承於Decorator抽象類 |
public class ConcreteDecoratorB : Decorator { public override void Operation() { base.Operation(); AddedBehavior(); }
private void AddedBehavior() { Console.WriteLine("進行了操作行為裝飾。"); } }
|
給物件介面Component新增了操作行為AddedBehavior() |
5、客戶端程式碼 |
static void Main(string[] args) { ConcreteComponent cc = new ConcreteComponent(); ConcreteDecoratorA cda = new ConcreteDecoratorA(); ConcreteDecoratorB cdb = new ConcreteDecoratorB();
cda.SetComponent(cc); cdb.SetComponent(cda); cdb.Operation(); Console.Read(); } |
給物件介面Component新增了操作行為AddedBehavior() |
3、程式執行結果
四.案例分析(Example)
此案例對具體元件TextView進行了Border和ScrollBar的裝飾。使TextView更符合專案需求。
五、總結(Summary)
裝飾模式,給一個物件動態新增額外職責,這些職責需要由使用者決定加入的方式和時機。裝飾模式提供了“即插即用”的方式,在執行期間決定何時增加何種功能。就增加功能來說,裝飾模式比生成子類更加靈活。
本文轉自靈動生活部落格園部落格,原文連結: http://www.cnblogs.com/ywqu/archive/2010/01/19/1651212.html ,如需轉載請自行聯絡原作者
相關文章
- Java設計模式之裝飾者模式(Decorator pattern)Java設計模式
- 設計模式之裝飾器模式(decorator pattern)設計模式
- JAVA設計模式之 裝飾模式【Decorator Pattern】Java設計模式
- 設計模式--裝飾模式(Decorator Pattern)設計模式
- 設計模式-裝飾模式(Decorator Pattern)設計模式
- C++ 設計模式 裝飾模式(Decorator Pattern)C++設計模式
- 裝飾模式 (Decorator Pattern)模式
- C#設計模式-裝飾器模式(Decorator Pattern)C#設計模式
- PHP設計模式(六)—裝飾器模式(Decorator Pattern)PHP設計模式
- PHP設計模式之裝飾器模式(Decorator)PHP設計模式
- python: 設計模式(design pattern)之修飾器模式(decorator)Python設計模式
- Decorator裝飾設計模式設計模式
- 設計模式 (十)裝飾模式(Decorator)設計模式
- PHP設計模式- Decorator 裝飾器模式PHP設計模式
- java設計模式-裝飾器模式(Decorator)Java設計模式
- 常用開源框架中設計模式使用分析- 裝飾器模式(Decorator Pattern)框架設計模式
- 09 結構型模式之裝飾者模式(decorator)模式
- 設計模式之裝飾者模式設計模式
- C#設計模式系列:裝飾模式(Decorator)C#設計模式
- Net設計模式例項之備忘錄模式(Memento Pattern)(2)設計模式
- 設計模式中的俄羅斯套娃:裝飾者(Decorator)模式設計模式
- 設計模式之裝飾者模式(二)設計模式
- 設計模式之裝飾者模式(一)設計模式
- PHP設計模式之裝飾者模式PHP設計模式
- Java設計模式之裝飾者模式Java設計模式
- 設計模式的征途—10.裝飾(Decorator)模式設計模式
- 設計模式--裝飾器模式Decorator(結構型)設計模式
- Decorator裝飾模式模式
- 設計模式-裝飾者模式設計模式
- 設計模式——裝飾者模式設計模式
- [設計模式]裝飾者模式設計模式
- 8.java設計模式之裝飾者模式Java設計模式
- 裝飾器模式(Decorator)模式
- 【設計模式之裝飾模式】設計模式
- 設計模式之裝飾模式設計模式
- 前端常用設計模式(1)--裝飾器(decorator)前端設計模式
- 設計模式之觀察者模式(Observer Pattern)設計模式Server
- 小白設計模式:裝飾者模式設計模式