1. 概念
構(gòu)造者模式是較為復(fù)雜的創(chuàng)建型模式,它將客戶端與包含多個組成部分的復(fù)雜對象的創(chuàng)建過程分離。客戶端無需知道具體的構(gòu)造過程,只需要與構(gòu)造器打交道即可。構(gòu)建與表示分離。
2. 使用場景
當構(gòu)造一個對象需要很多參數(shù)的時候,并且參數(shù)的個數(shù)或者類型不固定的時候。
3. 實例
abstract class Builder {
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
public Product getResult() {
return product;
}
}
public class ConcreateBuilder extends Builder {
@Override
public void buildPartA() {
}
@Override
public void buildPartC() {
}
@Override
public void buildPartB() {
}
}
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void setBuilder(Builder builder) {
this.builder = builder;
}
public Product construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
public class Product {
public String getPartA() {
return partA;
}
public void setPartA(String partA) {
this.partA = partA;
}
public String getPartB() {
return partB;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String getPartC() {
return partC;
}
public void setPartC(String partC) {
this.partC = partC;
}
private String partA;
private String partB;
private String partC;
}
public class BuilderClient {
public static void main(String[] args) {
Builder builder = new ConcreateBuilder();
Director director = new Director(builder);
Product product = director.construct();
}
}
4. 總結(jié)
Builder:它為創(chuàng)建一個產(chǎn)品Product對象的各個部件指定抽象接口
ConcreateBuilder:它實現(xiàn)了Builder接口,實現(xiàn)各個部件的具體構(gòu)造和裝配方法
Product:它是被構(gòu)建的復(fù)雜對象,包含多個組成部件
Director:指揮者又稱為導(dǎo)演類,它負責(zé)安排復(fù)雜對象的建造次序,指揮者與抽象建造者之間存在關(guān)聯(lián)關(guān)系
不過在具體的使用中,可能客戶端直接調(diào)用了ConcreateBuilder中的實際方法,而省略了Director。
5. 模式特性
松散耦合:生成器模式可以用同一個構(gòu)建算法構(gòu)建出表現(xiàn)上完全不同的產(chǎn)品,實現(xiàn)產(chǎn)品構(gòu)建和產(chǎn)品表現(xiàn)上的分離。
可以很容易的改編產(chǎn)品的內(nèi)部表示,同時又不用客戶端再次適配
更好的復(fù)用性:生成器模式很好的實現(xiàn)構(gòu)建算法和具體產(chǎn)品實現(xiàn)的分離
會產(chǎn)生多余的Builder對象,消耗內(nèi)存
對象的構(gòu)建過程暴露
6. 在android中的實際運用
AlertDialog