1汗侵、定義
將一個(gè)復(fù)雜對(duì)象的創(chuàng)建與它的表示分離台夺,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
2靡砌、使用場(chǎng)景
- 相同的方法驼仪,不同的執(zhí)行順序掸犬,產(chǎn)生不同的事件結(jié)果
- 多個(gè)零件,都可以裝配到一個(gè)對(duì)象中绪爸,但是產(chǎn)生的結(jié)果又不相同
- 產(chǎn)生類非常復(fù)雜湾碎,或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生了不同的作用
- 當(dāng)初始化一個(gè)隊(duì)想特別復(fù)雜(如參數(shù)多,且很多部件都有默認(rèn)值時(shí))
3毡泻、實(shí)現(xiàn)方式
計(jì)算機(jī)的組裝比較復(fù)雜胜茧,我們把這個(gè)過(guò)程簡(jiǎn)化一下:設(shè)置主板粘优、設(shè)置操作系統(tǒng)仇味、設(shè)置顯示器。然后通過(guò)Builder來(lái)構(gòu)建出具體的計(jì)算機(jī)對(duì)象雹顺。
- 計(jì)算機(jī)抽象類
/**
* 計(jì)算機(jī)抽象類丹墨,即 Product 角色
*/
abstract class Computer {
var board: String? = ""
var display: String? = ""
var OS: String? = ""
abstract fun setOs()
override fun toString(): String {
return "Computer(board='$board', display='$display', OS='$OS')"
}
}
- 具體的計(jì)算機(jī)
/**
* 具體的產(chǎn)品
*/
class Surface : Computer() {
override fun setOs() {
OS = "Windows 10"
}
}
- 抽象 Builder 類
/**
* 抽象 Builder 類
*
* 每個(gè)構(gòu)建方法都返回本身,方便鏈?zhǔn)秸{(diào)用
*/
abstract class Builder {
abstract fun buildBoard(board: String): Builder
abstract fun buildDisplay(display: String): Builder
abstract fun buildOS(): Builder
abstract fun build(): Computer
}
- 具體的 Builder 類
class SurfaceBuilder : Builder() {
private var computer: Computer = Surface()
override fun buildBoard(board: String): Builder {
computer.board = board
return this
}
override fun buildDisplay(display: String): Builder {
computer.display = display
return this
}
override fun buildOS(): Builder {
computer.setOs()
return this
}
override fun build(): Computer {
return computer
}
}
- 測(cè)試
val builder1 = SurfaceBuilder()
val computer1 = builder1.buildBoard("ASUS B350")
.buildDisplay("SamSung 34\" Display")
.build()
ALog.d(computer1.toString())
4嬉愧、Demo
5贩挣、Android 源碼中的運(yùn)用
android.app.AlertDialog.Builder
Dialog dialog = new AlertDialog.Builder(SensorSettingsActivity.this)
.setTitle("提示")
.setMessage("這就是安卓中的Builder模式Demo")
.create();
優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn)
- 良好的封裝性,使用 Builder 模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)没酣。
- 建造者獨(dú)立王财,容易擴(kuò)展
- 缺點(diǎn)
- 會(huì)產(chǎn)生多余的 Builder 對(duì)象以及 Director (可有可無(wú))對(duì)象,消耗內(nèi)存