解析C#設計形式編程中的裝潢者形式。本站提示廣大學習愛好者:(解析C#設計形式編程中的裝潢者形式)文章只能為提供參考,不一定能成為您想要的結果。以下是解析C#設計形式編程中的裝潢者形式正文
裝潢者形式界說:欠亨過派生類增改類屬性舉措,而是經由過程形式設計靜態的到達這類後果,並且比繼續更便利靈巧削減法式的龐雜性。
舉例
汪峰打造冠軍團隊。
起首團隊類為空,經由汪峰赓續的盡力,為團隊爭奪學員,也為團隊隊員打造適合的平台,讓其施展。
團隊赓續的變強,變完全,是由裝潢者,依據分歧的需求,給基類停止增改,分歧最初博得你的贊成,知足你的需求。
完成拆卸器形式的類圖:
戰隊組建代碼
//汪峰戰隊 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(); }
裝潢者形式的優缺陷
看完裝潢者形式的具體引見以後,我們持續剖析下它的優缺陷。
長處:
缺陷:
裝潢者形式會招致設計中湧現很多小對象,假如過度應用,會讓法式變的更龐雜。而且更多的對象會是的錯誤變得艱苦,特殊是這些對象看上去都很像。
應用場景
上面讓我們看看裝潢者形式詳細在哪些情形下應用,在以下情形下應該應用裝潢者形式:
須要擴大一個類的功效或給一個類增長附加義務。
須要靜態地給一個對象增長功效,這些功效可以再靜態地撤消。
須要增長由一些根本功效的分列組合而發生的異常年夜量的功效
.NET中裝潢者形式的完成
在.NET 類庫中也有裝潢者形式的完成,該類就是System.IO.Stream,上面看看Stream類構造:
BufferedStream、CryptoStream和GZipStream其實就是兩個詳細裝潢類,這裡的裝潢者形式省略了籠統裝潢腳色(Decorator)。上面演示下客戶端若何靜態地為MemoryStream靜態增長功效的。
MemoryStream memoryStream = new MemoryStream(new byte[] {95,96,97,98,99}); // 擴大緩沖的功效 BufferedStream buffStream = new BufferedStream(memoryStream); // 添加加密的功效 CryptoStream cryptoStream = new CryptoStream(memoryStream,new AesManaged().CreateEncryptor(),CryptoStreamMode.Write); // 添加緊縮功效 GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true);
總結
到這裡,裝潢者形式的引見就停止了,裝潢者形式采取對象組合而非繼續的方法完成了再運轉時靜態地擴大對象功效的才能,並且可以依據須要擴大多個功效,防止了零丁應用繼續帶來的 ”靈巧性差“和”多子類衍生成績“。同時它很好地相符面向對象設計准繩中 ”優先應用對象組合而非繼續“和”開放-關閉“准繩。