package com.leitao.demo.design;
import java.util.ArrayList;
import java.util.List;
/**
* 生成器(建造者模式)
* @Description: TODO
* @Author LeiTao
* @Date 2023/4/26
* @Version V1.0
**/
public class BuilderPattern {
public static void main(String[] args) {
Director director = new Director();
ConcreteBuilder1 builder1 = new ConcreteBuilder1();
director.Construct(builder1);
Product result1 = builder1.getResult();
result1.show();
ConcreteBuilder2 builder2 = new ConcreteBuilder2();
director.Construct(builder2);
Product result2 = builder2.getResult();
result2.show();
}
}
class Product{
List<String> parts = new ArrayList<>();
public void add(String part){
parts.add(part);
}
public void show(){
System.out.println("产品组成:");
for (String part : parts) {
System.out.println(part);
}
}
}
abstract class Builder {
public abstract void builderPart();
public abstract Product getResult();
}
class ConcreteBuilder1 extends Builder{
Product product = new Product();
@Override
public void builderPart() {
product.add("A");
product.add("B");
product.add("C");
}
@Override
public Product getResult() {
return product;
}
}
class ConcreteBuilder2 extends Builder{
Product product = new Product();
@Override
public void builderPart() {
product.add("D");
product.add("E");
product.add("F");
}
@Override
public Product getResult() {
return product;
}
}
class Director{
public void Construct(Builder builder){
builder.builderPart();
}
}