public class Product {
List<String> parts = new ArrayList<>();
/**
* 添加产品部件
* @param part
*/
public void add(String part){
parts.add(part);
}
/**
* 展示所有的产品部件
*/
public void showParts(){
for (String part : parts) {
System.out.println(part);
}
}
}
3. 创建抽象建造者类 其子类必须实现其抽象方法
public abstract class Builder{
public abstract void buildPartA();
public abstract void buildPartB();
public abstract Product getProduct();
}
4. 创建具体建造者类实现抽象建造者类
//1. 创建建造者一
public class ConcreteBuilder1 extends Builder{
private Product product;
public ConcreteBuilder1(){
product = new Product();
}
@Override
public void buildPartA() {
product.add("部件A");
}
@Override
public void buildPartB() {
product.add("部件B");
}
@Override
public Product getProduct() {
return product;
}
}
//2. 创建建造者二
public class ConcreteBuilder2 extends Builder{
private Product product;
public ConcreteBuilder2(){
product = new Product();
}
@Override
public void buildPartA() {
product.add("部件C");
}
@Override
public void buildPartB() {
product.add("部件D");
}
@Override
public Product getProduct() {
return product;
}
}
5. 创建指挥者类
public class Director {
/**
* 建造方法 指挥建造者去建造
* @param builder
*/
public void construct(Builder builder){
builder.buildPartA();
builder.buildPartB();
}
}
6. 测试类
public class Test {
@org.junit.Test
public void test(){
//创建指挥者
Director director = new Director();
//创建多个具体建造者
Builder builder1 = new ConcreteBuilder1();
Builder builder2 = new ConcreteBuilder2();
//指挥者指挥建造者建造产品
director.construct(builder1);
Product p1 = builder1.getProduct();
p1.showParts();
director.construct(builder2);
Product p2 = builder2.getProduct();
p2.showParts();
}
}