定義:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
類型:創(chuàng)建類模式
類圖:
http://wiki.jikexueyuan.com/project/java-design-pattern/images/builder-pattern-1.jpg" alt="builder-pattern" />
四個(gè)要素
代碼實(shí)現(xiàn)
class Product {
private String name;
private String type;
public void showProduct(){
System.out.println("名稱:"+name);
System.out.println("型號(hào):"+type);
}
public void setName(String name) {
this.name = name;
}
public void setType(String type) {
this.type = type;
}
}
abstract class Builder {
public abstract void setPart(String arg1, String arg2);
public abstract Product getProduct();
}
class ConcreteBuilder extends Builder {
private Product product = new Product();
public Product getProduct() {
return product;
}
public void setPart(String arg1, String arg2) {
product.setName(arg1);
product.setType(arg2);
}
}
public class Director {
private Builder builder = new ConcreteBuilder();
public Product getAProduct(){
builder.setPart("寶馬汽車","X7");
return builder.getProduct();
}
public Product getBProduct(){
builder.setPart("奧迪汽車","Q5");
return builder.getProduct();
}
}
public class Client {
public static void main(String[] args){
Director director = new Director();
Product product1 = director.getAProduct();
product1.showProduct();
Product product2 = director.getBProduct();
product2.showProduct();
}
}
建造者模式的優(yōu)點(diǎn)
首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場(chǎng)景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務(wù)邏輯封裝在導(dǎo)演類中對(duì)整體而言可以取得比較好的穩(wěn)定性。
其次,建造者模式很容易進(jìn)行擴(kuò)展。如果有新的需求,通過(guò)實(shí)現(xiàn)一個(gè)新的建造者類就可以完成,基本上不用修改之前已經(jīng)測(cè)試通過(guò)的代碼,因此也就不會(huì)對(duì)原有功能引入風(fēng)險(xiǎn)。
建造者模式與工廠模式的區(qū)別
我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個(gè)"導(dǎo)演類"的角色。在建造者模式的類圖中,假如把這個(gè)導(dǎo)演類看做是最終調(diào)用的客戶端,那么圖中剩余的部分就可以看作是一個(gè)簡(jiǎn)單的工廠模式了。
與工廠模式相比,建造者模式一般用來(lái)創(chuàng)建更為復(fù)雜的對(duì)象,因?yàn)閷?duì)象的創(chuàng)建過(guò)程更為復(fù)雜,因此將對(duì)象的創(chuàng)建過(guò)程獨(dú)立出來(lái)組成一個(gè)新的類——導(dǎo)演類。也就是說(shuō),工廠模式是將對(duì)象的全部創(chuàng)建過(guò)程封裝在工廠類中,由工廠類向客戶端提供最終的產(chǎn)品;而建造者模式中,建造者類一般只提供產(chǎn)品類中各個(gè)組件的建造,而將具體建造過(guò)程交付給導(dǎo)演類。由導(dǎo)演類負(fù)責(zé)將各個(gè)組件按照特定的規(guī)則組建為產(chǎn)品,然后將組建好的產(chǎn)品交付給客戶端。
總結(jié)
建造者模式與工廠模式類似,他們都是建造者模式,適用的場(chǎng)景也很相似。一般來(lái)說(shuō),如果產(chǎn)品的建造很復(fù)雜,那么請(qǐng)用工廠模式;如果產(chǎn)品的建造更復(fù)雜,那么請(qǐng)用建造者模式。