Net设计模式实例之装饰者模式(Decorator Pattern)(1)
生活随笔
收集整理的這篇文章主要介紹了
Net设计模式实例之装饰者模式(Decorator Pattern)(1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、裝飾模式簡介(Brief Intro<?XML:NAMESPACE PREFIX = ST1 />duction)
動態地給一個對象添加一些額外的職責。 優點:把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類。有效地把類的核心功能和裝飾功能區分開了。 <?XML:NAMESPACE PREFIX = O />?
二、解決的問題(What To Solve)
已經開發完畢的對象,后期由于業務需要,對舊的對象需要擴展特別多的功能,這時候使用給對象動態地添加新的狀態或者行為(即裝飾模式)方法,而不是使用子類靜態繼承。 比如,剛買一輛汽車如下圖 <?XML:NAMESPACE PREFIX = V /> 此汽車不符合你的個性要求,比如外表不夠美觀,發動機馬力不足,不能滿足你的速度激情,于是你需要對汽車的外表進行裝飾,同時需要提高發動機的性能。這些操作通過裝飾模式就能很好地解決問題。最終得到如下圖所示的個性汽車。三、裝飾模式分析(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 <?XML:NAMESPACE PREFIX = ST2 />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、程序運行結果
總結
以上是生活随笔為你收集整理的Net设计模式实例之装饰者模式(Decorator Pattern)(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ossim系统下nagios监控机器可用
- 下一篇: 无盘系统