定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Builder:生成器接口,定义创建一个Product对象所需的各个部件的操作。
ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
Director:指导者,也被称为导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
Product:产品,表示被生成器构建的复杂对象,包含多个部件。
/**
* 产品
*/
public class Product {
private String partA;
private String partB;
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
}
/**
* 生成器
*/
public abstract class Builder {
protected Product product;
public Product getProduct() {
return product;
}
public void createNewProduct() {
product = new Product();
}
public void buildPartA();
public void buildPartB();
}
/**
* 生成器实现
*/
public class ConcreteBuilderA extends Builder {
public void buildPartA() {
product.setPartA("part A for module 1");
}
public void buildPartB() {
product.setPartB("part B for module 1");
}
}
/**
* 生成器实现
*/
public class ConcreteBuilderB extends Builder {
public void buildPartA() {
product.setPartA("part A for module 2");
}
public void buildPartB() {
product.setPartB("part B for module 2");
}
}
/**
* 指导者
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product getProduct() {
return builder.getProduct();
}
public void construct() {
builder.createNewProduct();
builder.builderPartA();
builder.builderPartB();
}
}
/**
* 客户端
*/
public class Client {
public static void main(String[] args) {
Builder builderA = new ConcreteBuilderA();
Director directorA = new Director(builderA);
directorA.construct();
Product productA = directorA.getProduct();
Builder builderB = new ConcreteBuilderB();
Director directorB = new DirectorB(builderB);
directorB.construct();
Product productB = directorB.getProduct();
}
}
《研磨设计模式》