C# 設計模式-建造者模式
阿新 • • 發佈:2021-01-12
一.介紹
建造者模式(Singleton Pattern)。屬於建立型模式。將一個複雜物件的建立和它的表示分離,使得同樣的構建過程可以建立不同的表示。
二.實現
舉個例子,客戶去買電腦,都是和電腦店的老闆直接溝通的,然後老闆再安排裝機人員去安裝電腦,最後安裝完成就可以出貨。這個流程符合用建造者模式去實現,安裝電腦的過程都是一樣的,而用同樣的流程可以安裝出不同的電腦。
public static void Main(string[] args) { Boss boss = new Boss(); boss.SetBuilder(new CommonBuilder()); //同樣的構建過程不同的表示 boss.Delivery(); //出貨,一般電腦 boss.SetBuilder(new SeniorBuilder()); boss.Delivery(); //出貨,高階電腦 } /// <summary> /// 建造者模式中的指揮者 /// </summary> public class Boss { public Builder builder { get; set; } public void SetBuilder(Builder builder) { this.builder = builder; }/// <summary> /// 提貨 /// </summary> public void Delivery() { Console.WriteLine(builder.GetComputer().ToString()); } } /// <summary> /// 抽象建造者 /// </summary> public abstract class Builder { public abstract string BuildCPU(); public abstract string BuildMemory();public abstract string BuildHD(); /// <summary> /// 構建過程一般是固定的,當然也可以在子類override /// </summary> /// <returns></returns> public virtual Computer GetComputer() { return new Computer { CPU = BuildCPU(), Memory = BuildMemory(), HD = BuildHD() }; } } /// <summary> /// 具體建造者 一般電腦 /// </summary> public class CommonBuilder : Builder { public override string BuildCPU() { return "Intel 5"; } public override string BuildHD() { return "希捷 5400轉 500G"; } public override string BuildMemory() { return "金士頓 ddr3 4G"; } public override Computer GetComputer() { return new Computer { CPU = BuildCPU(), Memory = BuildMemory(), HD = BuildHD() }; } } /// <summary> /// 具體建造者 高階電腦 /// </summary> public class SeniorBuilder : Builder { public override string BuildCPU() { return "Intel 7"; } public override string BuildHD() { return "SSD 1T"; } public override string BuildMemory() { return "金士頓 ddr4 16G"; } public override Computer GetComputer() { return new Computer { CPU = BuildCPU(), Memory = BuildMemory(), HD = BuildHD() }; } } /// <summary> /// 構建的產品 /// </summary> public class Computer { public string CPU { get; set; } public string Memory { get; set; } public string HD { get; set; } public override string ToString() { var newLine = System.Environment.NewLine; return $"CPU:{CPU}{newLine}記憶體:{Memory}{newLine}硬碟:{HD}{newLine}"; } }
三.總結
建造者模式使得建造程式碼和表示程式碼分離,可以使客戶端不必知道產品組成的細節,從而降低客戶端和產品之間的耦合度。
參考:https://www.cnblogs.com/guyun/p/6183795.html