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

什么是建造者模式

又稱創(chuàng)造者模式坏为,將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示镊绪;隱藏了復(fù)雜對(duì)象的創(chuàng)建過(guò)程匀伏,它把復(fù)雜對(duì)象的創(chuàng)建過(guò)程加以抽象,通過(guò)子類或重載的方式蝴韭,動(dòng)態(tài)的創(chuàng)建具復(fù)合屬性的對(duì)象够颠。

簡(jiǎn)單解釋

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

UML類圖

image

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

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

缺點(diǎn)

  • 產(chǎn)品必須有共同點(diǎn)剃诅,范圍有限制;
  • 內(nèi)部變化復(fù)雜驶忌,會(huì)有很多建造類矛辕;

代碼解釋

  • 以蓋房子為例,創(chuàng)建一個(gè)產(chǎn)品房子付魔,構(gòu)建房子的過(guò)程
/**
 * 創(chuàng)建一個(gè)產(chǎn)品:房子聊品,構(gòu)建蓋房子的過(guò)程
 * @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("蓋房子開(kāi)始:");
        for (String part:parts) {
            System.out.println(part);
        }
    }
}
  • 聲明蓋房子的抽象類,明確蓋房子的三個(gè)過(guò)程
/**
 * 構(gòu)建抽象類几苍,聲明三個(gè)構(gòu)建過(guò)程
 * @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)建一個(gè)磚頭房的實(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)建一個(gè)商砼房的實(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)建一個(gè)工頭類妻坝,由工頭指揮蓋房子
/**
 * 工頭指揮蓋房子,用來(lái)指揮蓋房子的過(guò)程
 * @author ws
 * @version 1.0
 */
public class Foreman {

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

}
  • 測(cè)試類
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();
}
蓋房子開(kāi)始:
打地基
砌磚
上梁
蓋房子開(kāi)始:
打地基
拌混凝土
澆灌

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伸眶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惠勒,更是在濱河造成了極大的恐慌赚抡,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纠屋,死亡現(xiàn)場(chǎng)離奇詭異涂臣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門赁遗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)署辉,“玉大人,你說(shuō)我怎么就攤上這事岩四】蕹ⅲ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵剖煌,是天一觀的道長(zhǎng)材鹦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)耕姊,這世上最難降的妖魔是什么桶唐? 我笑而不...
    開(kāi)封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮茉兰,結(jié)果婚禮上尤泽,老公的妹妹穿的比我還像新娘。我一直安慰自己规脸,他們只是感情好坯约,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著莫鸭,像睡著了一般闹丐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上黔龟,一...
    開(kāi)封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天妇智,我揣著相機(jī)與錄音滥玷,去河邊找鬼氏身。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惑畴,可吹牛的內(nèi)容都是我干的蛋欣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼如贷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陷虎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起杠袱,我...
    開(kāi)封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尚猿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后楣富,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凿掂,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庄萎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踪少。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糠涛,靈堂內(nèi)的尸體忽然破棺而出援奢,到底是詐尸還是另有隱情,我是刑警寧澤忍捡,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布集漾,位于F島的核電站,受9級(jí)特大地震影響砸脊,放射性物質(zhì)發(fā)生泄漏帆竹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一脓规、第九天 我趴在偏房一處隱蔽的房頂上張望栽连。 院中可真熱鬧,春花似錦侨舆、人聲如沸秒紧。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蟹瘾。三九已至,卻和暖如春袱蜡,著一層夾襖步出監(jiān)牢的瞬間市咆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工愁铺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹰霍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓茵乱,卻偏偏與公主長(zhǎng)得像茂洒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓶竭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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

  • 二十三種設(shè)計(jì)模式 - 建造者模式 建造者模式簡(jiǎn)介 模式動(dòng)機(jī) 無(wú)論是在現(xiàn)實(shí)世界中還是在軟件系統(tǒng)中督勺,都存在一些復(fù)雜的對(duì)...
    JustTheSame閱讀 961評(píng)論 0 2
  • 定義 建造模式是對(duì)象的創(chuàng)建模式。建造模式可以將一個(gè)產(chǎn)品的內(nèi)部表象(internal representation)...
    步積閱讀 6,967評(píng)論 1 7
  • 目錄 本文的結(jié)構(gòu)如下: 引言 什么是建造者模式 模式的結(jié)構(gòu) 典型代碼 代碼示例 Builder模式變種 建造者模式...
    w1992wishes閱讀 447評(píng)論 0 3
  • 建造者模式(生成器模式) 介紹 沒(méi)有人買車會(huì)只買一個(gè)輪胎或者方向盤斤贰,大家買的都是一輛包含輪胎智哀、方向盤和發(fā)動(dòng)機(jī)等多個(gè)...
    666真666閱讀 5,296評(píng)論 2 10
  • 4. 謝澤翀把事情前前后后大概說(shuō)了一遍,結(jié)合丸子之前從別的知情人口里聽(tīng)來(lái)的話荧恍,脈絡(luò)也就猜得八九不離十了瓷叫。 兩個(gè)人之...
    煢悶悶閱讀 504評(píng)論 1 2