概述
- 建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。
- 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 建造者模式是一种对象创建型模式。
- 学习难度:★★★★☆
- 使用频率:★★☆☆☆
优缺点
类图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190326165404499.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmJpbjA4MzA=,size_16,color_FFFFFF,t_70)
组成角色
- 抽象建造者角色(Builder)
- 具体建造者角色(ConcreteBuilder)
- 产品角色(Product)
- 指导者角色(Director)
Code Example
抽象建造者角色(Builder)
public interface Builder {
void buildPartA();
void buildPartB();
void buildPartC();
Product buildProduct();
}
具体建造者角色(ConcreteBuilder)
public class ConcreteBuilder implements Builder {
private Product product = new Product();
public void buildPartA() {
product.setPartA("大轮胎");
}
public void buildPartB() {
product.setPartB("大方向盘");
}
public void buildPartC() {
product.setPartC("大发动机");
}
public Product buildProduct() {
return product;
}
}
产品角色(Product)
public class Product {
private String partA;
private String partB;
private String partC;
public String getPartA() {
return partA;
}
public void setPartA(String partA) {
this.partA = partA;
}
public String getPartB() {
return partB;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String getPartC() {
return partC;
}
public void setPartC(String partC) {
this.partC = partC;
}
}
指导者角色(Director)
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
客户端
public class BuilderPattern {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
director.construct();
Product product = builder.buildProduct();
System.out.println(product);
System.out.println(product.getPartA());
System.out.println(product.getPartB());
System.out.println(product.getPartC());
}
}