2010年3月12日 星期五

Design Pattern : 07 Builder


當我們想要建構出一個比較複雜的結果
或是想對相同內容提供不同的輸出樣式,就可以使用Builder Pattern

其流程是
1.先產生一個Builder類別,在Builder內
提供各種基本method
2.再產生一個組合程式用的Director類別
在Director內組合各式的builder 功能,來產生一個比較複雜的結果
外部程式只要操作Director就可以得到想要的結果
3.如果要讓同樣的內容可以產生不同格式的輸出
可以繼承Builder產生各式的Builder類別,來產生不同形式的輸出樣式

參與者
1.Builder
抽象類別,規範了要提供給Director操作的的各項method


class abstract Builder{
    public abstract makeTitle(String _title);
    public abstract makeBody(String _body);
    public abstract makeLine();
    public abstract Object getResult();
}

2.TextBuilder
繼承自Builder,並把相關method都實作出來


class abstract TextBuilder extends Builder{
    private StringBuffer buffer=new StringBuffer()
    public makeTitle(String _title){
        buffer.append(_title)
    };
    public makeBody(String _body){..};
    public makeLine(){..};
    public Object getResult(){
        return buffer.toString();
    };
}

3.Director
實體類別,在內部操作並組合各種Builder的method產生所要的結果
在Director只操作Builder類別的method,不可操作builder的子類別專屬method


class Director{
    private Builder builder;
    public Director(Builder builder){
        this.builder=builder;
    }
    public void setData(String _title,String _body){
        builder.makeLine();
        builder.makeTitle(_title);
        builder.makeBody(_body);
        builder.makeLine();
    }
    public void show(){
        System.out.println(builder.getResult().toString());
    }
}

4.Main外部程式


Director director=new Director(new TextBuilder());
director.setData("title","body");
director.show();

沒有留言: