1. 程式人生 > >《大話設計模式》——建造者模式

《大話設計模式》——建造者模式

多個 構圖 str 業務邏輯 clas 邏輯 add [] -1

建造者模式結構圖

技術分享

角色:
1、builder:建造者接口。定義了建造一個產品所必須的所有流程。所有的建造者都需要實現該類,以確保實現建造一個產品所需的流程。

2、concreteBuilder:具體建造者。每一個建造者,可以創建一種產品,產品細節在建造者中定義,因此多個產品對應多個建造者。

3、product:具體產品。

4、director:指揮者。由指揮者根據需求決定調用哪個建造者生產哪種產品。

實現:

1、product

public class Product{
    List<String> parts = new List<String>();

    
public void add(String part){ parts.add(part); } }

2、builder

inteface Builder{
    void partA();//這個產品有兩個部分組成,partA
    void partB();//這個產品有兩個部分組成,partB
    Product getProduct();
}

3、concreteBuilderA

public ConcreteBuilderA implement Builder{
    Product p = new Product();
    public void
partA(){//建造A部件 p.add("A"); } public void partB(){//建造B部件 p.add("B"); } public Product getProduct(){ return p; } }

concreteBuilderB

public ConcreteBuilderB implement Builder{
    Product p = new Product();
    public void partA(){//建造A部件
        p.add("AA");
    }
    
public void partB(){//建造B部件 p.add("BB"); } public Product getProduct(){ return p; } }

4、director

public Director{

    public void buildProject(Builder b){
        b.partA();
        b.partB();
    }
}

客戶端

    public static void main(String[] args) {
        Director d = new Director();
                Builder b1 = new concreteBuilderA();//建造者A建造產品,產品細節為A、B
                Builder b2 = new concreteBuilderA();//建造者A建造產品,產品細節為A、B
                d.buildProduct(b1);//建造產品
                d.buildProduct(b2);//建造產品
                Product p1 = b1.getProduct();//產品1
                Product p2 = b2.getProduct();//產品2
    }

優點:

首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產品類和建造者類是比較穩定的,因此,將主要的業務邏輯封裝在導演類中對整體而言可以取得比較好的穩定性。

其次,建造者模式很容易進行擴展。如果有新的需求,通過實現一個新的建造者類就可以完成,基本上不用修改之前已經測試通過的代碼,因此也就不會對原有功能引入風險。

與工廠模式區別:

建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。一般來說,如果產品的建造很復雜,那麽請用工廠模式;如果產品的建造更復雜,那麽請用建造者模式。

《大話設計模式》——建造者模式