一、模式定义
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
简单来说,建造者模式适用于对象产品有复杂的内部结构,由具有多个部分/多个步骤创建而成的情况(比如某对象的成员属性种具有引用类型的对象),那么在实例化时就得先实例化成员对象。建造者模式就是一步步的创建而得到该对象。
建造者模式与抽象工厂的区别:抽象工厂中的具体工厂子类对象可以生产多种产品(即不同等级结构的产品)。而建造者模式是通过指挥者中的Builder决定产生产品的类型,也就是说一个指挥者生产一种产品,但是可以通过对指挥者的Builder进行设置而转换成在这里插入代码片生产其他产品。
二、模式类图
产品类(Product)
指挥者类(Director):用于指挥生产产品的步骤(construct函数内安排不同建造产品的次序会产生不一样的产品,比如在生产Product过程中删除或保留BuildA()这一步骤)
建造者类(Builder):用于实现生产产品的步骤
三、模式代码(JAVA)
class Product{
//产品类
String partA;
int partB;
float partC;
//设置部分
void setPartA(String partA) { this.partA = partA;}
void setPartB(int partB) { this.partB = partB;}
void setPartC(float partC) { this.partC = partC;}
}
class Director{
//指挥者类
Builder builder;
public Product construct(){
//建造过程
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getProduct();
}
public Director(Builder builder) {
this.builder = builder;
}
void setBuilder(Builder builder) { this.builder = builder;}
}
abstract class Builder{
//建造者类
protected Product product;
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
public Product getProduct(){
return new Product();
}
Builder(){ product = new Product();}
}
//13建造
class A13Builder extends Builder{
//具体建造者
public void buildPartA() { product.setPartA("A13core");}
public void buildPartB() { product.setPartB(2019); }
public void buildPartC() { product.setPartC(11); }
public Product getProduct(){
return new Product();
}
}
//A12建造
class A12Builder extends Builder{
public void buildPartA() { product.setPartA("A12core");}
public void buildPartB() { product.setPartB(2018); }
public void buildPartC() { product.setPartC(10); }
public Product getProduct(){
return new Product();
}
}
public class Main {
//主函数
public static void main(String[] args) {
//指挥者
Director director = new Director(new A13Builder());
//A13产品
Product A13 = director.construct();
//设置A12Builder
director.setBuilder(new A12Builder());
//12产品
Product A12 = director.construct();
}
}