//产品
public class Product {
//组成产品的部件(材料)
List<String> parts = new ArrayList<>();
public void add(String part){
parts.add(part);
}
public void show(){
System.out.println("产品的组成:");
for(String s : parts){
System.out.print(s + "");
}
System.out.println("\n");
}
}
②创建"抽象套餐"
java复制代码
//抽象套餐
public abstract class Builder {
public abstract void BuildPart();
public abstract Product getResult();
}
③创建"具体套餐1"
java复制代码
//具体套餐1
public class Builder1 extends Builder{
//这很关键,要将产品放到具体套餐中,从而构造产品内容
Product product = new Product();
@Override
public void BuildPart() {
product.add("A");
product.add("B");
product.add("C");
product.add("D");
}
@Override
public Product getResult() {
return product;
}
}
④创建"具体套餐2"
java复制代码
//具体套餐2
public class Builder2 extends Builder{
//这很关键,要将产品放到具体套餐中,从而构造产品内容
Product product = new Product();
@Override
public void BuildPart() {
product.add("E");
product.add("F");
product.add("G");
}
@Override
public Product getResult() {
return product;
}
}
⑤创建"服务员"
java复制代码
//服务员
public class Director {
//这是关键:这里接收的参数是"抽象套餐Builder",将来要传入"具体套餐Builder1" or "具体套餐Builder2"
public void Construct(Builder builder){
builder.BuildPart();
}
}
最终,进行测试
java复制代码
public class Demo01Application {
public static void main(String[] args) {
//1.创建服务员
Director director = new Director();
//2.创建具体套餐1
Builder builder1 = new Builder1();
//3.服务员通知后厨做具体套餐1
director.Construct(builder1);
//4.查看具体套餐1的内容
Product product1 = builder1.getResult();
product1.show();
//创建具体套餐2
Builder builder2 = new Builder2();
//服务员通知后厨做具体套餐2
director.Construct(builder2);
//查看具体套餐2的内容
Product product2 = builder2.getResult();
product2.show();
}
}