.Net設計模式_建造者模式

引言:html

建造者的特色是過程,須要建造對象的過程是同樣的,如:軟件項目,過程都是,POC、投標、立項、軟件過程、收款,那麼標準的軟件項目都是這個過程,只是不一樣的項目在作這個過程的內容不同。因此須要有一個過程,這個過程須要被抽象出來(接口化),不一樣的項目實現不一樣的過程。算法

上面的過程,是有順序的,POC、投標、立項、軟件過程、收款,這個過程不能亂,因此須要有一個指揮官來固定建造的順序。ui

結合上述兩點,就是一個建造的的模式了,理論的說法是:是將一個複雜的對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。spa

 

理解:.net

建造者模式一般包括下面幾個角色:code

1. builder:給出一個抽象接口,以規範產品對象的各個組成部分的建造。這個接口規定要實現複雜對象的哪些部分的建立,並不涉及具體的對象部件的建立。htm

2. ConcreteBuilder:實現Builder接口,針對不一樣的商業邏輯,具體化複雜對象的各部分的建立。 在建造過程完成後,提供產品的實例。對象

3. Director:調用具體建造者來建立複雜對象的各個部分,在指導者中不涉及具體產品的信息,只負責保證對象各部分完整建立或按某種順序建立。blog

4. Product:要建立的複雜對象。接口

UML圖:(出之http://www.cnblogs.com/zhenyulu/articles/37378.html

 

代碼示例:

// 建立車的過程
public interface IBuilder
{
    void BuildPartA();
    void BuildPartB();
    Car GetCar();
}
// A車
public class ConcreteBuilderA : IBuilder
{
    Car car = new Car();
    public void BuildPartA()
    {
        car.Add("Build A Car part1");
    }

    public void BuildPartB()
    {
        car.Add("Build A Car part2");
    }

    public Car GetCar()
    {
        return car;
    }
}
// B車
public class ConcreteBuilderB : IBuilder
{
    Car car = new Car();
    public void BuildPartA()
    {
        car.Add("Build B Car part1");
    }

    public void BuildPartB()
    {
        car.Add("Build B Car part1");
    }

    public Car GetCar()
    {
        return car;
    }
}
// 車對象
public class Car
{
    ArrayList parts = new ArrayList();

    public void Add(string part)
    {
        parts.Add(part);
    }

    public void Show()
    {
        Console.WriteLine(" Car Parts -------");
        foreach (string part in parts)
            Console.WriteLine(part);
    }
}
// 指揮者
public class Director
{
    public void BuilderCar(IBuilder builder)
    {
        builder.BuildPartA();
        builder.BuildPartB();
    }
}
static void Main(string[] args)
{
    // 指揮者
    Director director = new Director();
    // 建造對象1
    IBuilder b1 = new ConcreteBuilderA();
    // 建造對象2
    IBuilder b2 = new ConcreteBuilderB();
    // 執行對象1
    director.BuilderCar(b1);
    Car c1 = b1.GetCar();
    c1.Show();
    // 執行對象2
    director.BuilderCar(b2);
    Car c2 = b2.GetCar();
    c2.Show();

    Console.ReadKey();
}

從代碼咱們能夠進一步的確認,須要建造的對象有不一樣的部分,如:partA、partB、....,建造這些部分的順序是固定的A、B、....。

咱們須要抽象出建造這些部分的接口,從而實現建造同樣有A、B、....部分的不一樣商品。

 

總結:

1.使用建造者模式可使客戶端沒必要知道產品內部組成的細節。

2.具體的建造者類之間是相互獨立的,對系統的擴展很是有利。

3.因爲具體的建造者是獨立的,所以能夠對建造過程逐步細化,而不對其餘的模塊產生任何影響。

 

使用的場景:

1.建立一些複雜的對象時,這些對象的內部組成構件間的建造順序是穩定的,可是對象的內部組成構件面臨着複雜的變化。

2.要建立的複雜對象的算法,獨立於該對象的組成部分,也獨立於組成部分的裝配方法時。

 

代碼下載:

百度網盤 http://pan.baidu.com/s/1gdHsIdX

CSDN http://download.csdn.net/detail/hater22/6842403

相關文章
相關標籤/搜索