Builder模式
模式介紹
模式的定義
將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離巫糙,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示摄狱。
模式的使用場(chǎng)景
1.相同的方法而咆,不同的執(zhí)行順序胖腾,產(chǎn)生不同的事件結(jié)果時(shí)烟零;
2.多個(gè)部件或零件瘪松,都可以裝配到一個(gè)對(duì)象中,但是產(chǎn)生的運(yùn)行結(jié)果又不相同時(shí)锨阿;
3.產(chǎn)品類非常復(fù)雜宵睦,或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生了不同的效能,這個(gè)時(shí)候使用建造者模式非常合適
Android源碼中的模式實(shí)現(xiàn)
在Android源碼中墅诡,我們最常用的Builder模式就是AlertDialog.Builder壳嚎,使用該Builder來構(gòu)建復(fù)雜的AlertDialog對(duì)象。簡(jiǎn)單示例如下:
//顯示基本的AlertDialog
private void showDialog(Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.icon);
builder.setTitle("Title");
builder.setMessage("Message");
builder.setPositiveButton("Button1",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("點(diǎn)擊了對(duì)話框上的Button1");
}
});
builder.setNeutralButton("Button2",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("點(diǎn)擊了對(duì)話框上的Button2");
}
});
builder.setNegativeButton("Button3",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setTitle("點(diǎn)擊了對(duì)話框上的Button3");
}
});
builder.create().show();? // 構(gòu)建AlertDialog末早, 并且顯示
}
優(yōu)點(diǎn)與缺點(diǎn)
優(yōu)點(diǎn)
● 良好的封裝性烟馅,使用建造者模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié);
● 建造者獨(dú)立然磷,容易擴(kuò)展郑趁;
● 在對(duì)象創(chuàng)建過程中會(huì)使用到系統(tǒng)中的一些其他對(duì)象,這些對(duì)象在產(chǎn)品的創(chuàng)建過程中不易得到姿搜;
缺點(diǎn)
● 會(huì)產(chǎn)生多余的Builder對(duì)象以及Director對(duì)象寡润,消耗內(nèi)存;
● 對(duì)象的構(gòu)建過程暴露