建造者模式(Builder Pattern)是一种创建型设计模式,它主要用于解决复杂对象的构建问题。在面对一个构造过程复杂、具有多个可选参数或参数之间相互依赖的对象时,通过使用建造者模式可以将构建和表示分离,使得客户端无需知道内部实现细节,只需要指定需要构建产品的类型和内容即可
抽象提取理论
代码结构图
/**
* 产品类
*/
public class Product {
ArrayList<String> parts = new ArrayList<>();
/**
* 添加新的产品部件
*/
public void add(String part){
parts.add(part);
}
/**
* 列举所有产品部门
*/
public void show(){
for (String part : parts) {
System.out.println(part);
}
}
}
/**
* 抽象建造者
*/
public abstract class Builder {
/**
* 建造部件A
*/
public abstract void buildPartA();
/**
* 建造部件B
*/
public abstract void buildPartB();
/**
* 得到产品
*/
public abstract Product getResult();
}
/**
* 具体建造者类
*/
public class ConcreteBuilder1 extends Builder{
private Product product = new Product();
@Override
public void buildPartA() {
product.add("部件A");
}
@Override
public void buildPartB() {
product.add("部件B");
}
@Override
public Product getResult() {
return product;
}
}
/**
* 具体建造者2
*/
public class ConcreteBuilder2 extends Builder{
private Product product = new Product();
@Override
public void buildPartA() {
product.add("部件X");
}
@Override
public void buildPartB() {
product.add("部件Y");
}
@Override
public Product getResult() {
return product;
}
}
/**
* 指挥者类
*/
public class Director {
public void construct(Builder builder){
builder.buildPartA();
builder.buildPartB();
}
}
/**
* 建造者客户端
*/
public class BuilderDemo {
public static void main(String[] args) {
Director director = new Director();
ConcreteBuilder1 concreteBuilder1 = new ConcreteBuilder1();
director.construct(concreteBuilder1);
concreteBuilder1.getResult().show();
System.out.println("=== === === ===");
ConcreteBuilder2 concreteBuilder2 = new ConcreteBuilder2();
director.construct(concreteBuilder2);
concreteBuilder2.getResult().show();
}
}