天天看點

設計模式之建造者模式

1 建造者模式

指将一個複雜對象的構造與它的表示分離,使同樣的建構過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。它是将一個複雜的對象分解為多個簡單的對象,然後一步一步建構而成。它将變與不變相分離,即産品的組成部分是不變的,但每一部分是可以靈活選擇的。

建造者模式的主要角色如下。

1 ) 産品角色(Product):

它是包含多個組成部件的複雜對象,由具體建造者來建立其各個滅部件。

2 ) 抽象建造者(Builder):

它是一個包含建立産品各個子部件的抽象方法的接口,通常還包含一個傳回複雜産品的方法 getResult()。

3) 具體建造者(Concrete Builder):

實作 Builder 接口,完成複雜産品的各個部件的具體建立方法

4)  指揮者(Director):

它調用建造者對象中的部件構造與裝配方法完成複雜對象的建立,在指揮者中不涉及具體産品的資訊。

2 類圖

設計模式之建造者模式

3 代碼實作

(1) 産品角色:包含多個組成部件的複雜對象。

class Product
{
    private String partA;
    private String partB;
    private String partC;
    public void setPartA(String partA)
    {
        this.partA = partA;
    }
    public void setPartB(String partB)
    {
        this.partB = partB;
    }
    public void setPartC(String partC)
    {
        this.partC = partC;
    }
    public void show()
    {
        //顯示産品的特性
    }
}      

(2) 抽象建造者:包含建立産品各個子部件的抽象方法。

abstract class Builder
{
    //建立産品對象
    protected Product product = new Product();
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();
    //傳回産品對象
    public Product getResult()
    {
        return product;
    }
}      

(3) 具體建造者:實作了抽象建造者接口。

public class ConcreteBuilder extends Builder
{
    public void buildPartA()
    {
        product.setPartA("建造 PartA");
    }
    public void buildPartB()
    {
        product.setPartB("建造 PartB");
    }
    public void buildPartC()
    {
        product.setPartC("建造 PartC");
    }
}      

(4) 指揮者:調用建造者中的方法完成複雜對象的建立。

class Director
{
    private Builder builder;
    public Director(Builder builder)
    {
        this.builder = builder;
    }
    //産品建構與組裝方法
    public Product construct()
    {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}      

(5) 客戶類。

public class Client
{
    public static void main(String[] args)
    {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        Product product = director.construct();
        product.show();
    }
}      

4  建造者模式優點和缺點

優點:各個具體的建造者互相獨立,有利于系統的擴充

缺點:如果産品的内部變化複雜,該模式會增加很多的建造者類

建造者模式和工廠模式的關注點不同:建造者模式注重零部件的組裝過程,而

工廠方法模式

更注重零部件的建立過程

繼續閱讀