常用设计模式4:建造者模式(Java)

建造者模式(Builder Pattern)

1. 简介

建造者模式是一种创建型设计模式,它允许分步骤创建复杂对象。允许使用相同的创建代码生成不同类型和形式的对象。

2. 为什么使用建造者模式?

  • 分步创建:可以分步骤创建复杂对象,每个步骤都可以细化。
  • 可复用:相同的构建过程可以创建不同的表示。
  • 关注点分离:将复杂对象的创建过程与其表示分离。
  • 更好的控制:对构造过程和结果有更精细的控制。

3. 建造者模式的结构

建造者模式主要包含以下几个角色:

  1. Builder:抽象建造者,声明创建复杂对象的各个部件的方法。
  2. ConcreteBuilder:具体建造者,实现抽象建造者的方法。
  3. Director:指挥者,调用建造者的方法完成复杂对象的创建。
  4. 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. 总结

建造者模式提供了一种灵活的解决方案,特别适合那些需要创建复杂对象的场景。它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式在处理复杂对象的创建,特别是当对象包含多个组成部分时,能够提供更好的灵活性和可读性。

posted @ 2024-08-02 16:25  KenWan  阅读(91)  评论(0)    收藏  举报