Java Builder模式解析
介绍
Builder模式是一种创建型设计模式,它允许您通过提供一个创建对象的公共接口,来逐步构建复杂的对象。该模式能够简化对象的构建过程,使得代码更加可读、易用和可维护。在Java中,Builder模式经常被用于创建不可变对象。
在本文中,我们将介绍Builder模式的概念、用法以及示例代码,并通过状态图和关系图来帮助读者更好地理解该模式。
概念
Builder模式将对象的构建过程从其表示中分离出来,使得同样的构建过程可以创建不同表示的对象。它包含以下几个核心角色:
- Director(指导者):负责使用Builder接口来构建对象,并定义构建的顺序。
- Builder(建造者):定义构建对象的接口和步骤。
- ConcreteBuilder(具体建造者):实现Builder接口,具体实现对象的构建步骤。
- Product(产品):表示被构建的对象。
示例
假设我们要创建一个简单的电脑对象,包含属性:CPU、内存、硬盘。使用Builder模式可以将构建过程分解为多个步骤,使得我们可以根据需要自定义构建的顺序和参数。
首先,我们定义一个电脑类Computer
,并在其中定义私有构造方法和属性:
public class Computer {
private String cpu;
private int memory;
private int hardDisk;
private Computer(String cpu, int memory, int hardDisk) {
this.cpu = cpu;
this.memory = memory;
this.hardDisk = hardDisk;
}
// Getters
}
接下来,我们创建一个Builder接口ComputerBuilder
,并在其中定义构建电脑对象的各个步骤:
public interface ComputerBuilder {
ComputerBuilder setCpu(String cpu);
ComputerBuilder setMemory(int memory);
ComputerBuilder setHardDisk(int hardDisk);
Computer build();
}
然后,我们创建具体的建造者SimpleComputerBuilder
,实现Builder接口,并在其中实现构建电脑对象的步骤:
public class SimpleComputerBuilder implements ComputerBuilder {
private String cpu;
private int memory;
private int hardDisk;
@Override
public ComputerBuilder setCpu(String cpu) {
this.cpu = cpu;
return this;
}
@Override
public ComputerBuilder setMemory(int memory) {
this.memory = memory;
return this;
}
@Override
public ComputerBuilder setHardDisk(int hardDisk) {
this.hardDisk = hardDisk;
return this;
}
@Override
public Computer build() {
return new Computer(cpu, memory, hardDisk);
}
}
最后,我们创建指导者ComputerDirector
,通过指导者来调用建造者的步骤来构建电脑对象:
public class ComputerDirector {
private ComputerBuilder computerBuilder;
public ComputerDirector(ComputerBuilder computerBuilder) {
this.computerBuilder = computerBuilder;
}
public Computer buildComputer(String cpu, int memory, int hardDisk) {
return computerBuilder
.setCpu(cpu)
.setMemory(memory)
.setHardDisk(hardDisk)
.build();
}
}
使用Builder模式构建电脑对象的示例代码如下:
public class Main {
public static void main(String[] args) {
ComputerBuilder computerBuilder = new SimpleComputerBuilder();
ComputerDirector computerDirector = new ComputerDirector(computerBuilder);
Computer computer = computerDirector.buildComputer("Intel i7", 8, 512);
System.out.println("CPU: " + computer.getCpu());
System.out.println("Memory: " + computer.getMemory() + "GB");
System.out.println("Hard Disk: " + computer.getHardDisk() + "GB");
}
}
以上代码会输出构建的电脑对象的属性:
CPU: Intel i7
Memory: 8GB
Hard Disk: 512GB
状态图
下面是Builder模式的状态图,用mermaid语法标识:
stateDiagram
[*] --> Builder
Builder --> ConcreteBuilder
Builder --> Director
ConcreteBuilder --> Product
Director --> Product
该状态图描述了Builder模式的核心角色和