建造者

建造者模式(Builder Pattern):將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離墨缘,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

模式結(jié)構(gòu)

-Builder:抽象建造者
-ConcreteBuilder:具體建造者
-Director:指揮者
-Product:產(chǎn)品角色

UML

Builder.jpg

代碼分析

/**
 * Created by TigerChain
 * 替代多參構(gòu)造方法--建造者模式
 */
public class ComputerB {
    private String mainBoard ;     // 主板
    private String cpu ;           // cpu
    private String hd ;            // 硬盤
    private String powerSupplier ; // 電源
    private String graphicsCard;   // 顯卡

    // 其它一些可選配置
    private String mouse ; // 鼠標(biāo)
    private String computerCase ; //機(jī)箱
    private String mousePad ;   //鼠標(biāo)墊
    private String other ;  //其它配件

    // ComputerB 自己充當(dāng) Director
    private ComputerB(ComputerBuilder builder) {
        this.mainBoard = builder.mainBoard ;
        this.cpu = builder.cpu ;
        this.hd = builder.hd ;
        this.powerSupplier = builder.powerSupplier ;
        this.graphicsCard = builder.graphicsCard ;

        this.mouse = builder.mouse ;
        this.computerCase = builder.computerCase ;
        this.mousePad = builder.mousePad ;
        this.other = builder.other ;
    }
    // 聲明一個(gè)靜態(tài)內(nèi)存類 Builder
    public static class ComputerBuilder{
        // 一個(gè)電腦的必須配置
        private String mainBoard ;     // 主板
        private String cpu ;           // cpu
        private String hd ;            // 硬盤
        private String powerSupplier ; // 電源
        private String graphicsCard;   // 顯卡

        // 其它一些可選配置
        private String mouse ; // 鼠標(biāo)
        private String computerCase ; //機(jī)箱
        private String mousePad ;   //鼠標(biāo)墊
        private String other ;  //其它配件

        // 這里聲明一些必須要傳的參數(shù)「規(guī)定這些參數(shù)是必須傳的锦秒,這里只是舉例旋炒,再實(shí)中可能參數(shù)都是可選的」
        public ComputerBuilder(String mainBoard,String cpu,String hd,String powerSupplier,String graphicsCard){
            this.mainBoard = mainBoard ;
            this.cpu = cpu ;
            this.hd = hd ;
            this.powerSupplier = powerSupplier ;
            this.graphicsCard = graphicsCard ;
        }

        public ComputerBuilder setMainBoard(String mainBoard) {
            this.mainBoard = mainBoard;
            return this ;
        }
        public ComputerBuilder setCpu(String cpu) {
            this.cpu = cpu;
            return this ;
        }
        // 生成最終的產(chǎn)品
        public ComputerB build(){
            return new ComputerB(this) ;
        }
    }
}

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

1尤泽、使創(chuàng)建產(chǎn)品的步驟「把創(chuàng)建產(chǎn)品步驟放在不同的方法中歌逢,更加清晰直觀」和產(chǎn)品本身分離,即使用相同的創(chuàng)建過程要吧創(chuàng)建出不同的產(chǎn)品
2翘狱、每個(gè)建造者都是獨(dú)立的互不影響秘案,這樣就達(dá)到解耦的目的,所以如果想要替換現(xiàn)有的建造者那非常方便潦匈,添加一個(gè)實(shí)現(xiàn)即可阱高。

缺點(diǎn)

1、如果一個(gè)對象有非常復(fù)雜的內(nèi)部結(jié)構(gòu)「這些產(chǎn)品通常有很多屬性」茬缩,那么使用建造者模式
2赤惊、如果想把復(fù)雜對象的創(chuàng)建和使用分離開來,那么使用建造者模式「使用相同的創(chuàng)建步驟可以創(chuàng)建不同的產(chǎn)品」

參考博客

https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html
https://juejin.im/post/5a23bdd36fb9a045272568a6

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凰锡,一起剝皮案震驚了整個(gè)濱河市未舟,隨后出現(xiàn)的幾起案子圈暗,更是在濱河造成了極大的恐慌,老刑警劉巖裕膀,帶你破解...
    沈念sama閱讀 212,185評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件员串,死亡現(xiàn)場離奇詭異,居然都是意外死亡昼扛,警方通過查閱死者的電腦和手機(jī)寸齐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抄谐,“玉大人渺鹦,你說我怎么就攤上這事∮己” “怎么了毅厚?”我有些...
    開封第一講書人閱讀 157,684評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挣惰。 經(jīng)常有香客問我卧斟,道長,這世上最難降的妖魔是什么憎茂? 我笑而不...
    開封第一講書人閱讀 56,564評論 1 284
  • 正文 為了忘掉前任珍语,我火速辦了婚禮,結(jié)果婚禮上竖幔,老公的妹妹穿的比我還像新娘板乙。我一直安慰自己,他們只是感情好拳氢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評論 6 386
  • 文/花漫 我一把揭開白布募逞。 她就那樣靜靜地躺著,像睡著了一般馋评。 火紅的嫁衣襯著肌膚如雪放接。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,874評論 1 290
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼老玛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛苟蹈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播右核,決...
    沈念sama閱讀 39,025評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼慧脱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贺喝?” 一聲冷哼從身側(cè)響起菱鸥,我...
    開封第一講書人閱讀 37,761評論 0 268
  • 序言:老撾萬榮一對情侶失蹤宗兼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后采缚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體针炉,經(jīng)...
    沈念sama閱讀 44,217評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評論 2 327
  • 正文 我和宋清朗相戀三年扳抽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了篡帕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,694評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贸呢,死狀恐怖镰烧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情楞陷,我是刑警寧澤怔鳖,帶...
    沈念sama閱讀 34,351評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站固蛾,受9級特大地震影響结执,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜艾凯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評論 3 315
  • 文/蒙蒙 一献幔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趾诗,春花似錦蜡感、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,778評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贝乎,卻和暖如春情连,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背览效。 一陣腳步聲響...
    開封第一講書人閱讀 32,007評論 1 266
  • 我被黑心中介騙來泰國打工蒙具, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朽肥。 一個(gè)月前我還...
    沈念sama閱讀 46,427評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像持钉,于是被迫代替她去往敵國和親衡招。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評論 2 349

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