標籤:override 建立 private 客戶 return returns 複雜 例子 rri
建造者模式可以將組件本身和它們的組裝過程分開,關注如何一步步建立一個包含多個組成部分的複雜物件,使用者只需要指定複雜物件的類型即可得到該對象,而無須知道其內部的具體構造細節。
建造者模式:將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
建造者模式的定義:
將用戶端與包含多個組件的複雜物件的建立過程分離,用戶端無須知道複雜物件的內部組成部分與裝配方式,只需要知道所需建造者的類型即可;
關注如何逐步建立一個複雜的對象,不同的建造者定義了不同的建立過程;
建造者模式的結構:
建造者模式包含以下4個角色:
Builder(抽象建造者)
ConcreteBuilder(具體建造者)
Product(產品)
Director(指揮者)
例子:
/// <summary>/// 抽象建造者/// </summary>public abstract class Builder{ public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract void BuilderPartC(); /// <summary> /// //建立產品對象 /// </summary> protected Product product = new Product(); /// <summary> /// 返回產品對象 /// </summary> /// <returns></returns> public Product GetResult() { return product; }}
/// <summary>/// 產品類/// </summary>public class Product{ //生產的產品 public string PartA { get; set; } public string PartB { get; set; } public string PartC { get; set; }}
/// <summary>/// 具體建造者/// </summary>public class ConcreteBuilder:Builder{ /// <summary> /// 產品A /// </summary> public override void BuilderPartA() { product.PartA = "A1"; Console.WriteLine("生產了A1產品"); } /// <summary> /// 產品B /// </summary> public override void BuilderPartB() { product.PartB = "B1"; Console.WriteLine("生產了B1產品"); } /// <summary> /// 產品C /// </summary> public override void BuilderPartC() { product.PartC = "C1"; Console.WriteLine("生產了C1產品"); }}
/// <summary>/// 指揮者/// </summary>public class Director{ private Builder _builder; public Director(Builder builder) { this._builder = builder; } public void SetBuilder(Builder builder) { this._builder = builder; } /// <summary> /// 產品構建與組裝方法 /// </summary> /// <returns></returns> public Product Construct() { _builder.BuilderPartA(); _builder.BuilderPartB(); _builder.BuilderPartC(); return _builder.GetResult(); }}
//用戶端調用Builder builder = new ConcreteBuilder();Director director = new Director(builder);Product product = director.Construct();
C#設計模式之建造者模式