定义
????提供一个建造者类负责复杂对象构建,将其复杂的构建和其表示分离,使用同一构建过程可以创建不同的表示。
调用方式
实现方法
????建造者模式主要由以下四种角色构成:
- Product:产品即最终生成的对象
- Builder:抽象建造者,定义创建产品的步骤,规范产品的组成
- ConcreteBuilder:实际建造者,实现Builder接口,完成复杂产品的各个部件的具体创建方法
- Director:指挥者,调用建造者的创建方法,完成对象的创建。
????上图是建造者模式的基本结构,当然实际运用中会产生一定的变化。接下来用简单代码演示:
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product construct() {
return builder.getProduct();
}
}
public interface Builder {
void buildA();
void buildB();
void buildC();
void buildD();
Product getProduct();
}
public class ConcreteBuilder implements Builder {
private Product product;
@Override
public void buildA() {
product.setModuleA("A part");
}
@Override
public void buildB() {
product.setModuleA("B part");
}
@Override
public void buildC() {
product.setModuleA("C part");
}
@Override
public void buildD() {
product.setModuleA("D part");
}
@Override
public Product getProduct() {
return product;
}
}
public class Product {
String moduleA;
String moduleB;
String moduleC;
String moduleD;
public String getModuleA() {
return moduleA;
}
public void setModuleA(String moduleA) {
this.moduleA = moduleA;
}
public String getModuleB() {
return moduleB;
}
public void setModuleB(String moduleB) {
this.moduleB = moduleB;
}
public String getModuleC() {
return moduleC;
}
public void setModuleC(String moduleC) {
this.moduleC = moduleC;
}
public String getModuleD() {
return moduleD;
}
public void setModuleD(String moduleD) {
this.moduleD = moduleD;
}
}
public class Client {
public static void main(String[] args) {
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director(builder);
Product product = director.construct();
}
}
使用场景
- 建造者模式和工厂模式都可用于复杂对象的创建,两者相同点在于能够对复杂对象的创建过程高内聚。两者不同点在于,工厂模式是为了获得产品,无需关心产品组成细节,而建造者模式是为了创建产品,控制产品组成细节。并且建造者模式中有Director的存在,能更精确的控制产品的创建流程。
- 建造者模式适用于不同Product对象间,具有相同的组成和构建顺序。
- 生产对象的构造器中含有大量可选参数,采用建造者模式可灵活控制产品组成,推荐使用。
|