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

建造者模式

建造者UML.png
class Goods{
    private String A;
    private String B;
    private String C;
    //setter and getter 
    // toString 
}

最終得到的商品類,A,B,C假想成商品的重要組成部分

abstract class GoodsBuild{
    protected Goods goods = new Goods();
    public abstract buildA();
    public abstract buildB();
    public abstract buildC();
    
    public Goods makeGoods(){
        return goods;
    }
}

抽象建造者

class AGoodsBuild extends GoodsBuild{
    public void buildA(){
        goods.setA("A商品的第一個(gè)屬性");
    }
    public void buildB(){
        goods.setA("A商品的第二個(gè)屬性");
    }
    public void buildC(){
        goods.setA("A商品的第三個(gè)屬性");
    }
}

A商品的構(gòu)造器

class BGoodsBuild extends GoodsBuild{
    public void buildA(){
        goods.setA("B商品的第一個(gè)屬性");
    }
    public void buildB(){
        goods.setA("B商品的第二個(gè)屬性");
    }
    public void buildC(){
        goods.setA("B商品的第三個(gè)屬性");
    }
}

B商品的構(gòu)造器

class GoodsController{
    public Goods getGoods(GoodsBuild gb){
        gb.buildA();
        gb.buildB();
        gb.buildC();
        return gb.makeGoods();
    }
}

商品控制器,用來拿商品的

class Client{
    public static void main(String args[]){
        GoodBuild gb = new AGoodsBuild();
        GoodsController controller = new GoodsController();
        Goods goods = controller.getGoods(gb);
    }
}   

客戶端,一個(gè)商品控制器傳入一個(gè)具體的商品構(gòu)造器即可獲得對(duì)于屬性的商品goods。

優(yōu)點(diǎn):

  1. 在建造者模式中,客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解 耦,使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品對(duì)象。
  2. 每一個(gè)具體建造者都相對(duì)獨(dú)立,而與其他的具體建造者無關(guān),因此可以很方便地替換具體 建造者或增加新的具體建造者,用戶使用不同的具體建造者即可得到不同的產(chǎn)品對(duì)象。由于 指揮者類針對(duì)抽象建造者編程,增加新的具體建造者無須修改原有類庫(kù)的代碼,系統(tǒng)擴(kuò)展方 便,符合“開閉原則”
  3. 可以更加精細(xì)地控制產(chǎn)品的創(chuàng)建過程。將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得 創(chuàng)建過程更加清晰,也更方便使用程序來控制創(chuàng)建過程。

缺點(diǎn)

  1. 建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點(diǎn),其組成部分相似,如果產(chǎn)品之間的差異 性很大,例如很多組成部分都不相同,不適合使用建造者模式,因此其使用范圍受到一定的 限制。
  2. 如果產(chǎn)品的內(nèi)部變化復(fù)雜,可能會(huì)導(dǎo)致需要定義很多具體建造者類來實(shí)現(xiàn)這種變化,導(dǎo)致 系統(tǒng)變得很龐大,增加系統(tǒng)的理解難度和運(yùn)行成本。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 建造者模式 想象一下,我們想要?jiǎng)?chuàng)建一個(gè)由多個(gè)部分構(gòu)成的對(duì)象,而且它的構(gòu)成需要一步接一步地完成。只有當(dāng)各個(gè)部分都創(chuàng)建...
    英武閱讀 2,282評(píng)論 1 50
  • 建造者模式(Builder Pattern)也叫做生成器模式,今天讓我們一起學(xué)習(xí)一下建造者模式。 一、基本介紹 建...
    冰鑒IT閱讀 806評(píng)論 2 8
  • 模式定義 建造者模式:將一個(gè)復(fù)雜產(chǎn)品的創(chuàng)建與表示分離,使得同樣的創(chuàng)建過程可以創(chuàng)建不同的表示客戶端不用去關(guān)心產(chǎn)品對(duì)象...
    C_zx閱讀 573評(píng)論 1 5
  • 建造者模式 定義 將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 首先這是一個(gè)復(fù)雜的對(duì)...
    晨鳴code閱讀 925評(píng)論 0 1
  • 對(duì)于在小事上堅(jiān)持努力,在大事上逃避頹廢的我,從無奈、無助到焦慮不安,我知道必須改變了,雖然每天都有學(xué)習(xí)的安排,但往...
    K德宏閱讀 165評(píng)論 2 2

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