常用设计模式4:建造者模式(Java)
建造者模式(Builder Pattern)
1. 简介
建造者模式是一种创建型设计模式,它允许分步骤创建复杂对象。允许使用相同的创建代码生成不同类型和形式的对象。
2. 为什么使用建造者模式?
- 分步创建:可以分步骤创建复杂对象,每个步骤都可以细化。
- 可复用:相同的构建过程可以创建不同的表示。
- 关注点分离:将复杂对象的创建过程与其表示分离。
- 更好的控制:对构造过程和结果有更精细的控制。
3. 建造者模式的结构
建造者模式主要包含以下几个角色:
- Builder:抽象建造者,声明创建复杂对象的各个部件的方法。
- ConcreteBuilder:具体建造者,实现抽象建造者的方法。
- Director:指挥者,调用建造者的方法完成复杂对象的创建。
- Product:产品,被构建的复杂对象。
4. Java 实现示例
下面通过一个简单的计算机构建的例子来说明建造者模式:
4.1 定义产品类
public class Computer {
private String CPU;
private String RAM;
private String storage;
private String GPU;
// Getters and setters...
@Override
public String toString() {
return "Computer{" +
"CPU='" + CPU + '\'' +
", RAM='" + RAM + '\'' +
", storage='" + storage + '\'' +
", GPU='" + GPU + '\'' +
'}';
}
}
4.2 定义抽象建造者
public interface ComputerBuilder {
void buildCPU(String cpu);
void buildRAM(String ram);
void buildStorage(String storage);
void buildGPU(String gpu);
Computer getResult();
}
4.3 实现具体建造者
public class GamingComputerBuilder implements ComputerBuilder {
private Computer computer;
public GamingComputerBuilder() {
this.computer = new Computer();
}
@Override
public void buildCPU(String cpu) {
computer.setCPU(cpu);
}
@Override
public void buildRAM(String ram) {
computer.setRAM(ram);
}
@Override
public void buildStorage(String storage) {
computer.setStorage(storage);
}
@Override
public void buildGPU(String gpu) {
computer.setGPU(gpu);
}
@Override
public Computer getResult() {
return computer;
}
}
4.4 定义指挥者
public class ComputerDirector {
private ComputerBuilder builder;
public ComputerDirector(ComputerBuilder builder) {
this.builder = builder;
}
public void constructComputer() {
builder.buildCPU("Intel i9");
builder.buildRAM("32GB");
builder.buildStorage("1TB SSD");
builder.buildGPU("NVIDIA RTX 3080");
}
public Computer getComputer() {
return builder.getResult();
}
}
4.5 客户端代码
public class Client {
public static void main(String[] args) {
ComputerBuilder builder = new GamingComputerBuilder();
ComputerDirector director = new ComputerDirector(builder);
director.constructComputer();
Computer computer = director.getComputer();
System.out.println(computer);
}
}
5. 建造者模式的优缺点
优点:
- 可以分步创建对象,并可以暂停或终止创建过程。
- 可以复用相同的创建代码来创建不同类型的对象。
- 符合单一职责原则,将复杂构造代码从产品的业务逻辑中分离出来。
缺点:
- 需要创建多个新的类,代码整体复杂度会有所增加。
- 与其他创建型模式相比,客户端代码需要了解更多细节。
6. 适用场景
- 需要创建的对象有复杂的内部结构。
- 需要创建的对象内部属性之间有一定的依赖关系。
- 对象的创建过程中需要增加一些灵活性,以适应不同的创建过程。
- 在创建一个对象的过程中,某些步骤需要延迟执行。
7. 总结
建造者模式提供了一种灵活的解决方案,特别适合那些需要创建复杂对象的场景。它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式在处理复杂对象的创建,特别是当对象包含多个组成部分时,能够提供更好的灵活性和可读性。

浙公网安备 33010602011771号