總體說來炼吴,建造者模式適合于一個具有較多的零件(屬性)的產(chǎn)品(對象)的創(chuàng)建過程。根據(jù)產(chǎn)品創(chuàng)建過程中零件的構(gòu)造是否具有一致的先后順序疫衩,可以將其分為如下兩種形式硅蹦。
一、通過靜態(tài)內(nèi)部類等方式實現(xiàn)的零件無序話構(gòu)造:
常見的經(jīng)典代碼如下:
package com.qqyumidi;
public class Client {
public static void main(String[] args) {
User.Builder builder = new User.Builder();
User user = builder.setName("corn").setAge(100).setAddress("廣州").build();
}
}
class User {
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
public static class Builder {
private User user = new User();
public Builder setName(String name) {
user.name = name;
return this;
}
public Builder setAge(int age) {
user.age = age;
return this;
}
public Builder setAddress(String address) {
user.address = address;
return this;
}
public User build() {
return user;
}
}
}
使用此種方式可以直接通過聯(lián)級形式構(gòu)造對象非常直觀方便闷煤。Android中的AlertDialog即采用此種方式創(chuàng)建童芹。
二、通過Client曹傀、Director辐脖、Builder和Product形成的建造者模式
Builder負(fù)責(zé)Product類對象的具體過程構(gòu)建,Director負(fù)責(zé)指導(dǎo)Build皆愉,要求Builder按照其指定的順序去完成Produt的構(gòu)造嗜价。最后通過Builder返回建造后的結(jié)果。網(wǎng)上有人對此種模式進行了形象的類比幕庐。
簡單地說久锥,就好象我要一座房子住,可是我不知道怎么蓋(簡單的砌墻异剥,層次較低)瑟由,也不知道怎么樣設(shè)計(建幾個房間,幾個門好看冤寿,層次較高)歹苦,于是我需要找一幫民工,他們會砌墻督怜,還得找個設(shè)計師殴瘦,他知道怎么設(shè)計,我還要確保民工聽設(shè)計師的領(lǐng)導(dǎo)号杠,而設(shè)計師本身也不干活蚪腋,光是下命令丰歌,這里砌一堵墻,這里砌一扇門屉凯,這樣民工開始建設(shè)立帖,最后,我可以向民工要房子了悠砚。在這個過程中晓勇,設(shè)計師是什么也沒有,除了他在腦子里的設(shè)計和命令哩簿,所以要房子也是跟民工要宵蕉,記住了酝静!
代碼暫時未整理节榜,后續(xù)整理上傳!