設(shè)計模式(九)建造者模式

總章目錄,設(shè)計模式(一)基本介紹

一、簡介

建造者模式(Builder Pattern) 又名生成器模式,是一種對象構(gòu)建模式。它可以將復(fù)雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對象。
建造者模式 是一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶只通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要知道內(nèi)部的具體構(gòu)建細節(jié)。
UML類圖:
1、抽象建造者(Builder):抽象接口或類,以規(guī)范產(chǎn)品對象的各個組成成分的建造。
2、具體建造者(ConcreteBuilder):1.實現(xiàn)抽象建造者Builder所聲明的接口,給出一步一步地完成創(chuàng)建產(chǎn)品實例的操作。2.在建造過程完成后,提供產(chǎn)品的實例。
3、指導(dǎo)者(Director):擔任這個角色的類調(diào)用具體建造者角色以創(chuàng)建產(chǎn)品對象。
4、產(chǎn)品(Product):產(chǎn)品便是建造中的復(fù)雜對象。

優(yōu)點:

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

缺點:

  1. 建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點,因此其使用范圍受限。
  2. 產(chǎn)品的內(nèi)部變化復(fù)雜,會導(dǎo)致系統(tǒng)變得很龐大。

二、實現(xiàn)

以下方式為簡單的實現(xiàn),通常會在create時賦值,賦值時僅保存變量

public class Summoner {
    private String shoes;
    private String arms;
    private String name;

    //省略 get  set

    public static class Builder {

        Summoner summoner;

        public void Builder(){
              summoner = new Summoner();
        }

        public Builder setArms(String arms) {
            summoner.setArms(arms);
            return this;
        }

        public Builder setShoes(String shoes) {
            summoner.setShoes(shoes);
            return this;
        }

        public Builder setName(String name) {
            summoner.setName(name);
            return this;
        }

        public Summoner build() {
            return summoner;
        }
    }
}
public class client {
    public static void main(String[] args) {
        Summoner summoner = new Summoner.Builder()
                .setName("武器大師")
                .setArms("三相之力")
                .setShoes("水銀鞋");
        System.out.println(summoner.toString());
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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