在实际的开发中,如果需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程产生出不同的表示的意图时,我们就需要使用“建造者模式”,又叫“生成器模式”。也就是说:构建的“过程”是稳定的,但是具体的构建“细节”是不同的。
如果使用了建造者模式,那么用户就只需要指定建造的类型就能够得到最终的结果,而具体的建造过程和细节就不需要知道了。
建造者模式(Builder):将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。

一、Builder是什么?
- 1.是为了创建一个Product对象的各个部件指定的抽象接口;
/**
* Created by serenitynanian on 2018/6/5.
* 抽象建造者类,确定产品由两个部件PartA和PratB组成,并声明一个得到产品建造结果的方法getProduct()
*/
public abstract class Builder {
public abstract void buildPartA();
public abstract void buildPartB();
public abstract Product getProduct();
}
二、ConcreteBuilder是什么?
- 1.它是具体的建造者,实现Builder接口,构造和装配各个部件;
/**
* Created by serenitynanian on 2018/6/5.
*
* 具体的建造类
*/
public class ConcreteBuildOne extends Builder{
private Product product = new Product();
@Override
public void buildPartA() {
product.add("部件A");
}
@Override
public void buildPartB() {
product.add("部件B");
}
@Override
public Product getProduct() {
return product;
}
}
##### 三、Product是什么?
* 1.它是构造出的具体产品
/**
- Created by serenitynanian on 2018/6/5.
- 产品类,由多个部件组成
*/
public class Product {
List<String> parts = new ArrayList<>();
public void add(String part) {
parts.add(part);
}
public void show() {
for (int i = 0; i < parts.size(); i++) {
System.out.println("-----产品---部件---->"+parts.get(i));
}
}
}
##### 四、Director是什么?
* 1.指挥者(Director):用它来控制建造过程,也用它来隔离用户与建造过程的关联;
* 2.它是构建一个使用Builder接口的对象;
/**
- Created by serenitynanian on 2018/6/5.
- 指挥者类
*/
public class Director {
/**
* 用来指挥建造过程
* @param builder
*/
public void concreateBuilder(Builder builder){
builder.buildPartA();
builder.buildPartB();
}
}
##### 五、客户端使用过程
public class ClientTest {
public static void main(String[] args) {
Director director = new Director();
Builder b1 = new ConcreteBuildOne();
Builder b2 = new ConcreteBuildTwo();
//指挥者用ConcreteBuildOne的方法来创建产品
director.concreateBuilder(b1);
b1.getProduct();
//指挥者用ConcreteBuildTwo的方法来创建产品
director.concreateBuilder(b2);
b2.getProduct();
}
}
##### 六、什么时间使用建造者模式呢?
主要是用于创建一些比较复杂的对象,这些对象内部构建的建造顺序是稳定的,但对象内部的构建通常面临着复杂的变化;
##### 总结
* 1.建造者模式是逐步建造产品的,所以建造者的Builder类里的那些建造方法必须要足够普遍,以便为各种类型的具体建造者构造;
网友评论