建造者模式

建造者模式(Builder)辽俗,將一個復(fù)雜對象的構(gòu)建與它的表示分離无牵,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示茬祷。

建造者模式主要用于創(chuàng)建一下復(fù)雜的對象,這些對象內(nèi)部構(gòu)件的建造順序通常是穩(wěn)定的竟终,但對象內(nèi)部的構(gòu)建通常面臨復(fù)雜的變化蝠猬。

建造者模式主要涉及4個部分:

  1. 抽象建造者:定義創(chuàng)建一個產(chǎn)品對象的各個部件的接口。
  2. 具體建造者:實現(xiàn)抽象建造者统捶,構(gòu)造和裝配各個部件榆芦。
  3. 指揮者:構(gòu)建一個使用抽象建造者的對象。
  4. 具體產(chǎn)品:產(chǎn)品本身喘鸟。

生產(chǎn)一輛車匆绣,需要建造發(fā)動機、車輪等什黑,車輛在這里就是具體產(chǎn)品崎淳。車輛建造者定義了建造發(fā)動機、車輪的接口愕把,承擔了抽象建造者的角色拣凹。小轎車建造者是一個具體的建造者,用于建造小轎車這一個類型恨豁。指揮者負責組裝車輛嚣镜。

建造者模式類圖
  • 車輛
public class Vehicle {
    List<String> partList = new ArrayList<>();

    public void addPart(String part) {
        partList.add(part);
    }

    public void show() {
        for (String part : partList) {
            System.out.println(part);
        }
    }
}
  • 車輛建造者
public interface VehicleBuilder {
    void buildEngine();
    void buildWheel();
    Vehicle getVehicle();
}
  • 小轎車建造者
public class SedanBuilder implements VehicleBuilder {
    private Vehicle vehicle = new Vehicle();

    @Override
    public void buildEngine() {
        vehicle.addPart("one engine");
    }

    @Override
    public void buildWheel() {
        vehicle.addPart("four wheel");
    }

    @Override
    public Vehicle getVehicle() {
        return vehicle;
    }
}
  • 指揮者
public class Director {
    private VehicleBuilder vehicleBuilder;

    public Director(VehicleBuilder vehicleBuilder) {
        this.vehicleBuilder = vehicleBuilder;
    }

    public void assembleCar() {
        vehicleBuilder.buildEngine();
        vehicleBuilder.buildWheel();
    }
}
  • 客戶端測試類
public class Client {
    public static void main(String[] args) {
        VehicleBuilder vehicleBuilder = new SedanBuilder();
        Director director = new Director(vehicleBuilder);
        director.assembleCar();
        Vehicle vehicle = vehicleBuilder.getVehicle();
        vehicle.show();
    }
}

運行結(jié)果:
one engine
four wheel

建造者模式實現(xiàn)了建造代碼與表示的分離,產(chǎn)品的內(nèi)部表示由具體建造者負責橘蜜,而組裝過程遷移到指揮者來單獨實現(xiàn)菊匿。并且具體建造者之間是相互獨立的,有利于程序的擴展,如果需要修改產(chǎn)品的內(nèi)部表示捧请,只需要再定義一個具體的建造者就可以了凡涩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疹蛉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌力麸,老刑警劉巖可款,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異克蚂,居然都是意外死亡闺鲸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門埃叭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摸恍,“玉大人,你說我怎么就攤上這事赤屋×⑾猓” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵类早,是天一觀的道長媚媒。 經(jīng)常有香客問我,道長涩僻,這世上最難降的妖魔是什么缭召? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮逆日,結(jié)果婚禮上嵌巷,老公的妹妹穿的比我還像新娘。我一直安慰自己室抽,他們只是感情好搪哪,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狠半,像睡著了一般噩死。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上神年,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天已维,我揣著相機與錄音,去河邊找鬼已日。 笑死垛耳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堂鲜,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼栈雳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缔莲?” 一聲冷哼從身側(cè)響起哥纫,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痴奏,沒想到半個月后蛀骇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡读拆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年擅憔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檐晕。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡暑诸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辟灰,到底是詐尸還是另有隱情个榕,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布伞矩,位于F島的核電站笛洛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏乃坤。R本人自食惡果不足惜苛让,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望湿诊。 院中可真熱鬧狱杰,春花似錦、人聲如沸厅须。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朗和。三九已至错沽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間眶拉,已是汗流浹背千埃。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忆植,地道東北人放可。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓谒臼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耀里。 傳聞我的和親對象是個殘疾皇子蜈缤,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容