3D建模要學多久?
阿新 • • 發佈:2020-10-14
這節講建造者模式(Builder Pattern)。
有些情況下,一個大類需要依賴另外一些小類共同完成一個需求,就好像一個完整的手機需要CPU,螢幕等小零件組成。
建造者模式就用來處理這個組成過程,它的定義為:指將一個複雜物件的構造與它的表示分離,使同樣的構建過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。它是將一個複雜的物件分解為多個簡單的物件,然後一步一步構建而成。它將變與不變相分離,即產品的組成部分是不變的,但每一部分是可以靈活選擇的。
建造者模式由兩個類組成:建造類和指揮類,建造類負責提供具體建造方法,指揮類負責呼叫建造類中的方法完成例項的建立。下面看一個完整的程式碼:
//最終產品class Mate { public string CPU { get; set; } public string Screen { get; set; } public string System { get; set; } public void LoadCPU(string cpu) { this.CPU = cpu; } public void LoadScreen(string scr) { this.Screen = scr; } public voidLoadSystem(string sys) { this.System = sys; } public override string ToString () { return $"Mate Stats:\n{CPU}\n{Screen}\n{System}"; } } //抽象建造者 abstract class ABuilder { protected Mate mate = new Mate (); public abstract void BuildCPU (); public abstractvoid BuildScreen (); public abstract void BuildSystem (); public Mate Products () => mate; } //具體建造者 class BuilderMate : ABuilder { public override void BuildCPU () { mate.LoadCPU ("CPU--就位"); } public override void BuildScreen () { mate.LoadScreen ("螢幕--就位"); } public override void BuildSystem () { mate.LoadSystem ("系統--就位"); } } //指揮者 class Commander { ABuilder bm = null; public Commander (ABuilder bm) { this.bm = bm; } //組裝,出品 public Mate construct () { bm.BuildCPU (); bm.BuildScreen (); bm.BuildSystem (); return bm.Products (); } }
在主方法中建造物件:
ABuilder b = new BuilderMate (); Commander comm = new Commander (b); Mate m= comm.construct (); Console.WriteLine (m.ToString ());
建造者模式的優點是封裝性好,構建和表示分離。擴充套件性好,各個具體的建造者相互獨立,有利於系統的解耦。客戶端不必知道產品內部組成的細節,建造者可以對建立過程逐步細化,而不對其它模組產生任何影響,便於控制細節風險。
當然,建造者模式的缺點也是顯而易見的,每個建造者類,只能服務這一種生產模式,另外如果產品自身發生變化,建造者類也要跟著做變化,後期的維護成本高。
建造者模式儘管跟共產模式都是用來建立物件,但建造者模式注重組裝,而工廠模式注重建立。這兩者可以結合起來使用,使用工廠模式建立零部件,使用建造者模式組裝最後的產品。
個人公眾號,熱愛分享,知識無價。