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

什么是建造者模式

又稱創(chuàng)造者模式,將一個復(fù)雜的對象的構(gòu)建與它的表示分離旁仿,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示藕夫;隱藏了復(fù)雜對象的創(chuàng)建過程枯冈,它把復(fù)雜對象的創(chuàng)建過程加以抽象滩褥,通過子類或重載的方式,動態(tài)的創(chuàng)建具復(fù)合屬性的對象。

簡單解釋

使用創(chuàng)建者模式驹针,用戶只需要指定需要建造的類型就可以得到其垄,而不知道具體的建造細(xì)節(jié);

UML類圖

image

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

  • 建造者獨(dú)立,易擴(kuò)展;
  • 便于細(xì)節(jié)控制風(fēng)險;
  • 隱藏了具體的實(shí)現(xiàn)過程;

缺點(diǎn)

  • 產(chǎn)品必須有共同點(diǎn)姐叁,范圍有限制挠唆;
  • 內(nèi)部變化復(fù)雜碧库,會有很多建造類弄匕;

代碼解釋

  • 以蓋房子為例,創(chuàng)建一個產(chǎn)品房子延曙,構(gòu)建房子的過程
/**
 * 創(chuàng)建一個產(chǎn)品:房子,構(gòu)建蓋房子的過程
 * @author ws
 * @version 1.0
 */
public class House {

    List<String> parts=new ArrayList<>();

    public void Add(String part){
        parts.add(part);
    }

    public void show(){
        System.out.println("蓋房子開始:");
        for (String part:parts) {
            System.out.println(part);
        }
    }
}
  • 聲明蓋房子的抽象類,明確蓋房子的三個過程
/**
 * 構(gòu)建抽象類儒溉,聲明三個構(gòu)建過程
 * @author ws
 * @version 1.0
 */
public abstract class Builder {
    public abstract void builderOne();

    public abstract void builderTwo();

    public abstract void builderThree();

    public abstract House getResult();

}
  • 創(chuàng)建一個磚頭房的實(shí)現(xiàn)類,繼承蓋房子
/**
 *磚房
 * @author ws
 * @version 1.0
 */
public class BrickHouse extends Builder {
    private House house=new House();
    @Override
    public void builderOne() {
        house.Add("打地基");
    }
    @Override
    public void builderTwo() {
        house.Add("砌磚");
    }
    @Override
    public void builderThree() {
        house.Add("上梁");
    }
    @Override
    public House getResult() {
        return house;
    }
}

  • 創(chuàng)建一個商砼房的實(shí)現(xiàn)類,繼承蓋房子
/**
 * 混凝土房
 * @author 1.0
 * @version 1.0
 */
public class ConcreteHourse extends Builder {
    private House house=new House();
    @Override
    public void builderOne() {
        house.Add("打地基");
    }
    @Override
    public void builderTwo() {
        house.Add("拌混凝土");
    }
    @Override
    public void builderThree() {
        house.Add("澆灌");
    }
    @Override
    public House getResult() {
        return house;
    }
}

  • 創(chuàng)建一個工頭類,由工頭指揮蓋房子
/**
 * 工頭指揮蓋房子,用來指揮蓋房子的過程
 * @author ws
 * @version 1.0
 */
public class Foreman {

    public void construct(Builder builder){
        builder.builderOne();
        builder.builderTwo();
        builder.builderThree();
    }

}
  • 測試類
public static void main(String[] args) {
    Foreman foreman=new Foreman();
    Builder brick=new BrickHouse();
    Builder concrtet=new ConcreteHourse();
    //蓋磚房
    foreman.construct(brick);
    House brickHourse=brick.getResult();
    brickHourse.show();
    //蓋混凝土房
    foreman.construct(concrtet);
    House concreteHourse=concrtet.getResult();
    concreteHourse.show();
}
蓋房子開始:
打地基
砌磚
上梁
蓋房子開始:
打地基
拌混凝土
澆灌

參照:大話設(shè)計模式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惧财,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搀突,老刑警劉巖顽分,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡祠肥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門属提,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堪滨,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵铺罢,是天一觀的道長缩滨。 經(jīng)常有香客問我侧巨,道長皇忿,這世上最難降的妖魔是什么繁扎? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己窘游,他們只是感情好忍饰,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布亮靴。 她就那樣靜靜地躺著茧吊,像睡著了一般宪彩。 火紅的嫁衣襯著肌膚如雪活合。 梳的紋絲不亂的頭發(fā)上错维,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天仰楚,我揣著相機(jī)與錄音捂襟,去河邊找鬼煞赢。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牧挣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼刨摩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怕犁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挠进,失蹤者是張志新(化名)和其女友劉穎暖璧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昆著,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摆碉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脓豪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巷帝。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扫夜,靈堂內(nèi)的尸體忽然破棺而出楞泼,到底是詐尸還是另有隱情,我是刑警寧澤笤闯,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布堕阔,位于F島的核電站,受9級特大地震影響颗味,放射性物質(zhì)發(fā)生泄漏超陆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一浦马、第九天 我趴在偏房一處隱蔽的房頂上張望时呀。 院中可真熱鬧张漂,春花似錦、人聲如沸谨娜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞧预。三九已至,卻和暖如春仅政,著一層夾襖步出監(jiān)牢的瞬間垢油,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工圆丹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滩愁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓辫封,卻偏偏與公主長得像硝枉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子倦微,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

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

  • 二十三種設(shè)計模式 - 建造者模式 建造者模式簡介 模式動機(jī) 無論是在現(xiàn)實(shí)世界中還是在軟件系統(tǒng)中妻味,都存在一些復(fù)雜的對...
    JustTheSame閱讀 961評論 0 2
  • 定義 建造模式是對象的創(chuàng)建模式。建造模式可以將一個產(chǎn)品的內(nèi)部表象(internal representation)...
    步積閱讀 6,967評論 1 7
  • 目錄 本文的結(jié)構(gòu)如下: 引言 什么是建造者模式 模式的結(jié)構(gòu) 典型代碼 代碼示例 Builder模式變種 建造者模式...
    w1992wishes閱讀 447評論 0 3
  • 建造者模式(生成器模式) 介紹 沒有人買車會只買一個輪胎或者方向盤欣福,大家買的都是一輛包含輪胎责球、方向盤和發(fā)動機(jī)等多個...
    666真666閱讀 5,296評論 2 10
  • 馬云出現(xiàn)在王菲演唱會第一排,票價100萬 成功的人都是互相幫襯拓劝,馬云與趙薇是最好的朋友雏逾,而趙薇是王菲最好的閨蜜,所...
    李恩億的書屋閱讀 201評論 0 1