1. 程式人生 > >大話設計模式-建造者模式

大話設計模式-建造者模式

建造者模式

建造者模式又稱生成器模式,將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

建造者模式主要用於建立一些複雜的物件,這些物件內部構構建間的構造順序通常是穩定的,但物件內部的構建通常面臨著複雜的變化。

建造者模式的好處就是使得建造程式碼與表示程式碼分離,由於建造者隱藏了該產品是如何組裝的,所以若需要改變一個產品的內部表示,只需要再定義一個具體的建造者就可以了。

建造者模式是在當建立複雜物件的演算法應該獨立於該物件的組成部分以及他們的裝配方式時適用的模式。

 


建造者模式結構演示

產品類:Product

Product是具體的產品角色,由多個部件組成

class Product{
    IList<string> parts = new List<string>();
    public void Add(string part) => parts.Add(part);
    public void Show(){
        Console.WriteLine("產品建立");
        foreach (string part in parts)
            Console.WriteLine(part);
    }
}

建造者抽象類:Builder

是建造一個產品的各個部分的抽象類,規定實現一個產品必須要實現的部分。由確定產品的兩個部件PartA和PartB組成,並宣告一個得到產品建造後結果的方法GetResult。

abstract class Builder{
    public abstract void BuilderPartA();
    public abstract void BuilderPartB();
    public abstract Product GetResult();
}

具體建造者類:ConcreteBuilder

具體建造者類是對抽象的具體實現,基於同樣要求實現的方法實現不同的內容,建造兩個具體的部件。

class ConcreteBuilderA : Builder{
    private Product product = new Product();
    
public override void BuilderPartA() => product.Add("部件A"); public override void BuilderPartB() => product.Add("部件B"); public override Product GetResult() => product; } class ConcreteBuilderB : Builder{ private Product product = new Product(); public override void BuilderPartA() => product.Add("部件X"); public override void BuilderPartB() => product.Add("部件Y"); public override Product GetResult() => product; }

指揮者類:Director

指揮者類根據使用者的需求來建立產品。其中指揮建造過程。

class Director{
    public void Construct(Builder builder){
        builder.BuilderPartA();
        builder.BuilderPartB();
    }
}

測試類:Program

客戶端不需要知道具體的建造過程。

//Main方法
Director director = new Director();
Builder b1 = new ConcreteBuilderA();
Builder b2 = new ConcreteBuilderB();
director.Construct(b1);
Product p1 = b1.GetResult();
p1.Show();
director.Construct(b2);
Product p2 = b2.GetResult();
p2.Show();
//測試結果
產品建立
部件A
部件B
產品建立
部件X
部件Y