定義
不通過派生類增改類屬性動作,而是通過模式設計動態的達到這種效果,而且比繼承更方便靈活減少程序的複雜性。
舉例
汪峯打造冠軍團隊。
首先團隊類爲空,經過汪峯不斷的努力,爲團隊爭取學員,也爲團隊隊員打造合適的平臺,讓其發揮。
團隊不斷的變強,變完整,是由裝飾者,根據不同的需求,給基類進行增改,一致最後贏得你的贊同,滿足你的需求。
實現裝配器模式的類圖:
戰隊組建代碼
//汪峯戰隊 abstract class WangFengTeam { //執行策劃命令 abstract public void Acrion(); } //學員 class Student : WangFengTeam { // Methods override public void Acrion() { Console.WriteLine("汪峯團隊學員情況:"); } } // 戰隊總策劃 abstract class Direct : WangFengTeam { //汪峯戰隊 protected WangFengTeam team; // 策劃活動 public void SetComponent(WangFengTeam team) { this.team = team; } //執行策劃 override public void Acrion() { if (team != null) { team.Acrion(); } } } //男孩唱狂放型的,構建一個組合。 class BoyTeam : Direct { // 組合名稱 public string teamName= "鋒利的Jquery"; //具體策劃 override public void Acrion() { base.Acrion(); Console.WriteLine("我是汪峯團隊,狂放型的。"); } } //女孩唱婉約型的,來個模特表演 class GrilTeam : Direct { //具體策劃 override public void Acrion() { base.Acrion(); Console.WriteLine("我是汪峯團隊,婉約型的。"); //模特表演 show(); } public void show() { Console.WriteLine("婉約型,走秀"); } }
客戶端代碼:
public static void Main() { Student team = new Student(); BoyTeam boy = new BoyTeam(); GrilTeam girl = new GrilTeam(); //團隊男孩裝飾 boy.SetComponent(team); //團隊女孩裝飾 girl.SetComponent(boy); girl.Acrion(); Console.Read(); }
動態擴展類功能屬性,而無需通過繼承層次結構實現,這改變啦一些繼承類的不足之處,也更方便靈活給類添加職責方式。但是裝飾器模式在使用過程中,也會給維護人員帶來煩惱,因爲他會產生許多小的對象,讓你頭痛欲裂,所以,代碼註釋,還有代碼條理一定要整理清楚,以防給後期維護人員帶來,看着蛋疼的代碼。
轉載自: http://www.cnblogs.com/knowledgesea/p/3942169.html