介绍
基本介绍
建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同的表现(属性)的对象
原则
- 将复杂对象的构建过程与其表示分离,使得构建过程可以独立地创建不同的表示。
- 可以通过不同的具体建造者来创建不同的表示,而无需修改客户端代码。
建造者模式的四个角色
Product (产品角色):一个具体的产品对象
Builder(抽象建造者):创建一个 Product 对象的各个部件指定的接口 / 抽象类
ConcreteBuilder (具体建造者):实现接口,构建和装配各个部件
Director(指挥者):构建一个使用 Builder 接口的对象。它主要是用于创建一个复杂的对象。
作用
- 隔离了客户与对象的生产过程
- 负责控制产品对象的生产过程
使用场景
1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。 2、JAVA 中的 StringBuilder。
案例
// 产品类
class Product {
private String partA;
private String partB;
private String partC;
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
public void setPartC(String partC) {
this.partC = partC;
}
public void show() {
System.out.println("Product parts:");
System.out.println("Part A: " + partA);
System.out.println("Part B: " + partB);
System.out.println("Part C: " + partC);
}
}
// 抽象建造者类
abstract class Builder {
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
public Product getResult() {
return product;
}
}
// 具体建造者类
class ConcreteBuilder extends Builder {
@Override
public void buildPartA() {
product.setPartA("PartA");
}
@Override
public void buildPartB() {
product.setPartB("PartB");
}
@Override
public void buildPartC() {
product.setPartC("PartC");
}
}
// 指挥者类
class Director {
public Product construct(Builder builder) {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director();
Product product = director.construct(builder);
product.show();
}
}
注释:
-
Product
类是产品类,它包含了多个组成部件(partA、partB、partC),通过setPartX
方法设置每个部件的值,并通过show
方法展示产品的组成部件。 -
Builder
是抽象建造者类,定义了产品的构建过程和方法。其中getResult
方法返回构建完成的产品对象。 -
ConcreteBuilder
是具体建造者类,实现了抽象建造者类中定义的方法,完成具体产品的构建。 -
Director
是指挥者类,负责控制建造过程。它通过传入具体的建造者对象来构建产品,调用建造者的方法按照一定的顺序进行构建,并返回构建完成的产品。 -
客户端代码中创建具体建造者对象和指挥者对象,通过指挥者的
construct
方法来构建产品。最后调用产品的show
方法展示产品的组成部件。
优缺点
优点
- 分离构建过程和表示,使得构建过程更加灵活,可以构建不同的表示。
- 可以更好地控制构建过程,隐藏具体构建细节。
- 代码复用性高,可以在不同的构建过程中重复使用相同的建造者。
缺点
- 如果产品的属性较少,建造者模式可能会导致代码冗余。
- 建造者模式增加了系统的类和对象数量。