前言
點選檢視:設計模式系列
裝飾器模式(Decorator)
定義:不通過派生類增改類屬性動作,而是通過模式設計動態的達到這種效果,而且比繼承更方便靈活減少程式的複雜性。
舉例:
汪峰打造冠軍團隊。
首先團隊類為空,經過汪峰不斷的努力,為團隊爭取學員,也為團隊隊員打造合適的平臺,讓其發揮。
團隊不斷的變強,變完整,是由裝飾者,根據不同的需求,給基類進行增改,一致最後贏得你的贊同,滿足你的需求。
實現裝配器模式的類圖:
戰隊組建程式碼
//汪峰戰隊 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(); }
裝飾器模式理解
動態擴充套件類功能屬性,而無需通過繼承層次結構實現,這改變啦一些繼承類的不足之處,也更方便靈活給類新增職責方式。但是裝飾器模式在使用過程中,也會給維護人員帶來煩惱,因為他會產生許多小的物件,讓你頭痛欲裂,所以,程式碼註釋,還有程式碼條理一定要整理清楚,以防給後期維護人員帶來,看著蛋疼的程式碼。
希望你能執行下程式碼,根據執行次序去理解每一個設計模式,多思考,多探討