設計模式--Builder

標簽(空格分隔): android 設計模式 builder


1 Builder設計模式概述

將復雜對象的構建與它的表示分離碌识,使得同樣的構建過程可以產生不容的表示澈魄。即通過一個專門的Builder的對象來構建新的對象理疙。

2 使用場景

  • 一般用于復雜對象的構建齿梁。
    例如油额,網絡訪問的對象需要傳入多個參數叠纷,將參數類型設置為一個Config類,構建Config類的對象就可以使用Builder類潦嘶。

3 三種構建對象方式的比較

3.1 通過構造函數傳入

壞處:參數多的時候涩嚣,編寫代碼的人要當心傳錯參數,查看代碼的人不太容易理解傳入參數的含義掂僵。不方便維護航厚。即使是分多個構造函數傳入不同的參數也是一樣。

3.2 通過setter挨個構造

好處:易于閱讀锰蓬,并且可以只對有用的成員變量賦值幔睬;

缺點:

  • 不能使用final類型

  • 用戶可能拿到不完整的對象。

3.3 Builder方式構造

  • 1內容
  • 在要構建的類的內部創(chuàng)建一個靜態(tài)內部Builder類

  • 該靜態(tài)內部類的字段與要創(chuàng)建的類保持一致

  • Builder類的構造方法傳入初始化必須的參數(final類型)

  • Builder類提供setter方法芹扭,返回自身this

  • 要構建的類的構造方法傳入Builder類的實例

  • Builder類提供build方法麻顶,調用要構建的類的構造方法,返回要構建的類的實例。

  • 2核心思想

變種 Builder 模式目的在于減少對象創(chuàng)建過程中引入的多個構造函數舱卡、可選參數以及多個 setter 過度使用導致的不必要的復雜性辅肾。同時某些參數如果用戶沒有設置,可以有默認值轮锥。

  • 3好處
  • 鏈式調用宛瞄,優(yōu)雅好看

  • 先賦值,后創(chuàng)建對象,保證對象的完整性份汗。

  • 4代碼

public class Person {

//固定不變的對象盈电,一般變量需要聲明為 final

private final String mName;    //必選,final 類型需要在 構造器中初始化杯活,不允許不初始化它的構造器存在

private String mLocation;      //可選

private String mJob;            //可選

private String mHabit;          //可選

/**

* 構造方法的參數是它的 靜態(tài)內部類匆帚,使用靜態(tài)內部類的變量一一賦值

* @param builder

*/

public Person(Builder builder) {

this.mName = builder.mName;

this.mLocation = builder.mLocation;

this.mJob = builder.mJob;

this.mHabit = builder.mHabit;

}

/**

* Person 的靜態(tài)內部類,成員變量和 Person 的一致

*/

public static class Builder{

private final String mName;    //必選旁钧,final 類型需要在 構造器中初始化吸重,不允許不初始化它的構造器存在

private String mLocation;      //可選

private String mJob;            //可選

private String mHabit;          //可選

/**

* 含必選參數的構造方法

* @param name

*/

public Builder(String name) {

mName = name;

}

public Builder setLocation(String location) {

mLocation = location;

return this;

}

public Builder setJob(String job) {

mJob = job;

return this;

}

public Builder setHabit(String habit) {

mHabit = habit;

return this;

}

/**

* 最終構建方法,返回一個 PersonTree 對象歪今,參數是當前 Builder 對象

* @return

*/

public PersonThree build(){

return new Person(this);

}

}

}

  • 5技巧

下載AS插件 Inner Builder,寫好要構建的類的字段之后嚎幸,直接 Generate構造Buidler

4 實際案例

android中的AlertDialog對象就是使用Builder模式來構建的。

new AlertDialog.Builder(self)
 .setTitle("標題") 
 .setMessage("簡單消息框")
 .setPositiveButton("確定", null) 
 .show(); 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末寄猩,一起剝皮案震驚了整個濱河市嫉晶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌田篇,老刑警劉巖替废,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泊柬,居然都是意外死亡椎镣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門兽赁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來状答,“玉大人,你說我怎么就攤上這事刀崖【疲” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵蒲跨,是天一觀的道長译断。 經常有香客問我授翻,道長或悲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任堪唐,我火速辦了婚禮巡语,結果婚禮上,老公的妹妹穿的比我還像新娘淮菠。我一直安慰自己男公,他們只是感情好,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布合陵。 她就那樣靜靜地躺著枢赔,像睡著了一般澄阳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踏拜,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天碎赢,我揣著相機與錄音,去河邊找鬼速梗。 笑死肮塞,一個胖子當著我的面吹牛,可吹牛的內容都是我干的姻锁。 我是一名探鬼主播枕赵,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼位隶!你這毒婦竟也來了拷窜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钓试,失蹤者是張志新(化名)和其女友劉穎装黑,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體弓熏,經...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡恋谭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挽鞠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疚颊。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖信认,靈堂內的尸體忽然破棺而出材义,到底是詐尸還是另有隱情,我是刑警寧澤嫁赏,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布其掂,位于F島的核電站,受9級特大地震影響潦蝇,放射性物質發(fā)生泄漏款熬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一攘乒、第九天 我趴在偏房一處隱蔽的房頂上張望贤牛。 院中可真熱鬧,春花似錦则酝、人聲如沸殉簸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽般卑。三九已至武鲁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝠检,已是汗流浹背洞坑。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝇率,地道東北人迟杂。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像本慕,于是被迫代替她去往敵國和親排拷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內容

  • 上一篇文章設計模式-單例模式我們介紹了單例模式的幾種用法和優(yōu)缺點锅尘,具體的我們需要結合項目中的場景去具體選擇监氢。這一篇...
    i卓閱讀 328評論 0 1
  • 1 場景問題# 1.1 繼續(xù)導出數據的應用框架## 在討論工廠方法模式的時候,提到了一個導出數據的應用框架藤违。 對于...
    七寸知架構閱讀 5,759評論 1 64
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理浪腐,服務發(fā)現(xiàn),斷路器顿乒,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • Builder模式可以稱為建造者模式议街,它將一個復雜對象的構建和表示分離,同樣的構建過程可以創(chuàng)建不同的表示 適用場景...
    KevinLive閱讀 669評論 0 0
  • Builder模式 定義:將一個復雜對象的構建和它的表示分離璧榄,使得同樣的構建過程可以創(chuàng)建不同的表示特漩。 使用場景:(...
    ping_平閱讀 304評論 0 2