Java 設(shè)計(jì)模式 -- 建造者模式

建造者模式

建造者模式就是一步一步的創(chuàng)建一個(gè)復(fù)雜的對象,而且允許用戶指定復(fù)雜對象的類型和內(nèi)容。

Builder 類是一個(gè)抽象類,用于定義一些創(chuàng)建子部件的方法,Builder類中應(yīng)該還有一個(gè) getResult() 方法,用于將創(chuàng)建好的部件組裝成一個(gè)產(chǎn)品返回。

Director 類又稱為指揮者,用于安排復(fù)雜對象的建造次序,通過construct() 方法,指導(dǎo)Builder類完成組裝。

通過一個(gè)例子來更好的理解建造者模式,比如說現(xiàn)在的手機(jī)都支持更換主題,所有的主題建造過程都是類似的,比如說更換圖標(biāo),背景,提示音,那么這個(gè)時(shí)候就可以通過建造者模式來完成這一過程。

先來設(shè)計(jì)一下Product和Builder類

public class Product {

    private String mBackground;
    private String mIcon;
    private String mSounds;

    public String getBackground() {
        return mBackground;
    }
    public void setBackground(String background) {
        mBackground = background;
    }
    public String getIcon() {
        return mIcon;
    }
    public void setIcon(String icon) {
        mIcon = icon;
    }
    public String getSounds() {
        return mSounds;
    }
    public void setSounds(String sounds) {
        mSounds = sounds;
    }   

}


public abstract class Builder {

    private Product mProduct = new Product();

    public Product getResult(){
        return mProduct;
    }

    public abstract void buildBackground();
    public abstract void buildIcon();
    public abstract void buildSounds();
}

可見,不論什么樣的主題,以上代碼都是通用的,對于不同的主題,只需要在ConcreteBuilder中進(jìn)行設(shè)置就可以了。

public class ConcreteBuilder extends Builder{

    public void buildBackground(){
        mProduct.setBackground("Black");
    }
    public void buildIcon(){
        mProduct.setIcon("MyIcon");
    }
    public void buildSounds(){
        mProduct.setSounds("MySounds");
    }
}

既然產(chǎn)品生產(chǎn)過程已經(jīng)構(gòu)建出來了,那么就到了Director 類發(fā)揮作用的時(shí)候了,現(xiàn)在就由Director 來指揮各個(gè)部件的創(chuàng)造,并且將組裝好的產(chǎn)品返回給客戶端。

public class Director {

    public Product construct(Builder builder){
        builder.buildBackground();
        builder.buildIcon();
        builder.buildSounds();
        return builder.getResult();
    }

}

可見Director 類中只有一個(gè)簡單的方法,有的時(shí)候當(dāng)產(chǎn)品的部件不是很多的時(shí)候,完全可以將該方法放到Builder類中,從而省略Director 類。

已經(jīng)看出,建造者模式和抽象工廠模式很類似。其實(shí),抽象工廠模式更側(cè)重于生產(chǎn) “部件” , 而建造者模式側(cè)重于將各個(gè) 部件組裝成一個(gè)產(chǎn)品。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容