建造者模式

定義:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示

依然是來個例子

首先是我們要構建的產品,包含一個添加方法與顯示方法

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

    public void add(String part)
    {
        this.parts.add(part);
    }
    public void show()
    {
        System.out.println("\n產品創建---");
        for (String string : this.parts)
        {
            System.out.println(string);
        }
    }
}

然後是個建造者類,這是個虛類,所有方法都是虛的,子類必須實現所有方法才行,這就避免了在實際創建時缺少某些步驟的情況

public abstract class Builder
{
    abstract public void bilderPartA();

    abstract public void bilderPartB();

    abstract public Product getResult();
}

第一個具體類,實現父類的方法,也就是給產品加些字符串,也是在實際代碼中給產品增加的新內容

public class ConcreteBuilder1 extends Builder
{
    private Product product = new Product();

    @Override
    public void bilderPartA()
    {
        this.product.add("部件A");
    }

    @Override
    public void bilderPartB()
    {
        this.product.add("部件B");

    }

    @Override
    public Product getResult()
    {
        return this.product;
    }
}

第二個子類,同上

public class ConcreteBuilder2 extends Builder
{
    private Product product = new Product();

    @Override
    public void bilderPartA()
    {
        this.product.add("部件K");
    }

    @Override
    public void bilderPartB()
    {
        this.product.add("部件L");

    }

    @Override
    public Product getResult()
    {
        return this.product;
    }
}

指揮官,這牛逼角色,控制着構建過程,

public class Director
{
    public void construct(Builder builder)
    {
        builder.bilderPartA();
        builder.bilderPartB();
    }
}

客戶端就很簡單了,感覺與前面的幾種模式有很大的相同點

public class BuilderMain
{
    public static void main(String[] args)
    {
        Director director = new Director();

        Builder builder = new ConcreteBuilder1();
        director.construct(builder);
        Product p1 = builder.getResult();
        p1.show();

        builder = new ConcreteBuilder2();
        director.construct(builder);
        Product p2 = builder.getResult();
        p2.show();
    }
}

總結:這個模式主要用在那些構建細節比較複雜,構建過程又比較單一,可以將這個過程總結出來,放到父類中強制子類實現;指揮官的角色會保證構建過程的完整。

發佈了106 篇原創文章 · 獲贊 49 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章