設(shè)計(jì)模式-Builder模式

一慢显,java中的 Builder模式

  • 概念
    構(gòu)建者模式將客戶端與包含多個組成部分(或部件)的復(fù)雜對象的創(chuàng)建過程分離

  • 使用場景
    當(dāng)構(gòu)造一個對象需要很多參數(shù)的時候,并且參數(shù)的個數(shù)和類型不固定的時候

  • UML結(jié)構(gòu)圖分析

    image.png

    總結(jié):
    1.Builder:為創(chuàng)建產(chǎn)品Product對象的各個部件指定抽象接口
    2.ConcreateBuilder:實(shí)現(xiàn)Builder接口沃琅,實(shí)現(xiàn)各部件結(jié)構(gòu)的構(gòu)造和裝配方法
    3.Product:它是被構(gòu)建的復(fù)雜對象,包含多個組成部件
    4.Directior:指揮者选酗,負(fù)責(zé)安排負(fù)責(zé)對象的建造次序阵难,指揮者與抽象Builder之間存在關(guān)聯(lián)關(guān)系

  • 實(shí)際代碼分析

public class Product  {
    private String partA;
    private String partB;
    private String partC;

    public String getPartA() {
        return partA;
    }

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public String getPartB() {
        return partB;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public String getPartC() {
        return partC;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }
}

public abstract class Builder {
    protected Product product = new Product();

    public abstract void buildPartA();

    public abstract void buildPartB();

    public abstract void buildPartC();

    public Product getResult() {
        return product;
    }
}
public class ConcreateBuilder extends Builder{


    @Override
    public void buildPartA() {

    }

    @Override
    public void buildPartB() {

    }

    @Override
    public void buildPartC() {

    }
}

public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void setBuilder(Builder builder) {
        this.builder = builder;
    }

    public Product construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}
 Builder builder = new ConcreateBuilder();
        Director director = new Director(builder);
        Product product = director.construct();
  • 優(yōu)點(diǎn)
    松散耦合
    容易修改內(nèi)部屬性
    更好的復(fù)用性(具體實(shí)現(xiàn)以及算法都可以復(fù)用)
  • 缺點(diǎn)
    產(chǎn)生多余的Builder對象以及Dirctor對象,消耗內(nèi)存
    對于構(gòu)造過程的暴露

二芒填,Builder模式在android中的應(yīng)用

android中的簡單實(shí)現(xiàn)

public class AndroidProduct {
    private String partA;
    private String partB;
    private String partC;

    private AndroidProduct(String partA, String partB, String partC) {
        this.partA = partA;
        this.partB = partB;
        this.partC = partC;
    }

    public  static class Builder {
        private String partA;
        private String partB;
        private String partC;

        public Builder setPartA(String partA) {
            this.partA = partA;
            return this;
        }

        public Builder setPartB(String partB) {
            this.partB = partB;
            return this;
        }

        public Builder setPartC(String partC) {
            this.partC = partC;
            return this;
        }

        public AndroidProduct build() {
            return new AndroidProduct(partA, partB, partC);
        }
    }
}
 AndroidProduct androidProduct = new AndroidProduct.Builder()
.setPartA("a")
.setPartB("b")
.setPartC("c").build();
   

Android中的實(shí)際應(yīng)用:
1.AlertDialog
2.Gilde/okhttp

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市空繁,隨后出現(xiàn)的幾起案子殿衰,更是在濱河造成了極大的恐慌,老刑警劉巖盛泡,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闷祥,死亡現(xiàn)場離奇詭異,居然都是意外死亡傲诵,警方通過查閱死者的電腦和手機(jī)凯砍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拴竹,“玉大人悟衩,你說我怎么就攤上這事∷ò荩” “怎么了座泳?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幕与。 經(jīng)常有香客問我挑势,道長,這世上最難降的妖魔是什么啦鸣? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任潮饱,我火速辦了婚禮,結(jié)果婚禮上诫给,老公的妹妹穿的比我還像新娘香拉。我一直安慰自己啦扬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布缕溉。 她就那樣靜靜地躺著考传,像睡著了一般。 火紅的嫁衣襯著肌膚如雪证鸥。 梳的紋絲不亂的頭發(fā)上僚楞,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音枉层,去河邊找鬼泉褐。 笑死,一個胖子當(dāng)著我的面吹牛鸟蜡,可吹牛的內(nèi)容都是我干的膜赃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼揉忘,長吁一口氣:“原來是場噩夢啊……” “哼跳座!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泣矛,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疲眷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后您朽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狂丝,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年哗总,在試婚紗的時候發(fā)現(xiàn)自己被綠了几颜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡讯屈,死狀恐怖蛋哭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耻煤,我是刑警寧澤具壮,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站哈蝇,受9級特大地震影響棺妓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炮赦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一怜跑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦性芬、人聲如沸峡眶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辫樱。三九已至,卻和暖如春俊庇,著一層夾襖步出監(jiān)牢的瞬間狮暑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工辉饱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搬男,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓彭沼,卻偏偏與公主長得像缔逛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子姓惑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

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