1. 程式人生 > 實用技巧 >C# 設計模式-建造者模式

C# 設計模式-建造者模式

一.介紹  

  建造者模式(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