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模式的核心角色和