Net设计模式实例之装饰者模式(Decorator Pattern)(1)
生活随笔
收集整理的這篇文章主要介紹了
Net设计模式实例之装饰者模式(Decorator Pattern)(1)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、裝飾模式簡介(Brief Intro<?XML:NAMESPACE PREFIX = ST1 />duction)
動態(tài)地給一個對象添加一些額外的職責(zé)。 優(yōu)點:把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類。有效地把類的核心功能和裝飾功能區(qū)分開了。 <?XML:NAMESPACE PREFIX = O />?
二、解決的問題(What To Solve)
已經(jīng)開發(fā)完畢的對象,后期由于業(yè)務(wù)需要,對舊的對象需要擴展特別多的功能,這時候使用給對象動態(tài)地添加新的狀態(tài)或者行為(即裝飾模式)方法,而不是使用子類靜態(tài)繼承。 比如,剛買一輛汽車如下圖 <?XML:NAMESPACE PREFIX = V /> 此汽車不符合你的個性要求,比如外表不夠美觀,發(fā)動機馬力不足,不能滿足你的速度激情,于是你需要對汽車的外表進行裝飾,同時需要提高發(fā)動機的性能。這些操作通過裝飾模式就能很好地解決問題。最終得到如下圖所示的個性汽車。三、裝飾模式分析(Analysis)
1、裝飾模式結(jié)構(gòu)
Component定義了一個對象接口,可以給這些對象動態(tài)地添加職責(zé)。 ComcreteComponent定了一個具體的對象,也可以給這個具體的對象添加職責(zé)。 Decorator抽象裝飾類,繼承了Component對象接口,從外類擴展Component類的功能,但對于Component來說,是無需知道Decorator的存在。 ConcreteDecoratorA具體的裝飾對象,起到給Component添加職責(zé)的功能。 ConcreteDecoratorB具體的裝飾對象,起到給Component添加職責(zé)的功能。2、源代碼
| 1、對象接口Component.cs |
| public abstract class Component { ??? public abstract void Operation(); } |
?
| 2、實現(xiàn)類ConcreteComponent.cs 繼承于Component接口 |
| public class ConcreteComponent : Component { ??? public override void Operation() ??? { ??? ??? Console.WriteLine("開始執(zhí)行具體的對象..."); ??? } } |
?
| 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 = "進行了狀態(tài)屬性裝飾。"; ??????? Console.WriteLine(addedState); ??? } } |
| 給對象接口Component添加了狀態(tài)屬性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、程序運行結(jié)果
總結(jié)
以上是生活随笔為你收集整理的Net设计模式实例之装饰者模式(Decorator Pattern)(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ossim系统下nagios监控机器可用
- 下一篇: .NET Framework基础知识(二