设计模式之建造者模式

发布于:2025-07-01 ⋅ 阅读:(22) ⋅ 点赞:(0)

定义

       建造者模式是一种创建型设计模式,其核心思想是将复杂对象的构建过程与其表示分离,使相同构建逻辑能生成不同结构的对象。该模式通过分步骤构建复杂对象,允许用户只指定对象类型和内容而无需了解内部构建细节。

结构

在这里插入图片描述

适用场景

      1)对象具有复杂内部结构或需要多个配置参数时;
      2)需要将对象的创建与使用分离;
      3)相同构建过程需产生不同表现形式;
      4)避免使用过长的构造器参数列表;
      5)构建步骤可能变化或需要不同构建顺序时。

使用示例

      这里以一台电脑的组装为例,来展示建造者模式的简单示例。
      定义产品及建造者

/**
 * 产品类:电脑(包含五大组件)
 */
@Data
public class Computer {
    private String cpu;       // 处理器
    private String ram;       // 内存
    private String storage;   // 硬盘
    private String gpu;       // 显卡
    private String motherboard; // 主板

    public Computer() {
    }

    @Override
    public String toString() {
        return "电脑配置:\n" +
                "CPU: " + cpu + "\n" +
                "内存: " + ram + "\n" +
                "硬盘: " + storage + "\n" +
                "显卡: " + gpu + "(独立显卡)\n" +
                "主板: " + motherboard;
    }

    // 抽象建造者(核心角色)
    public static abstract class Builder {
        
        protected Computer computer = new Computer();

        // 抽象构建方法
        public abstract Builder setCPU(String cpu);
        public abstract Builder setRAM(String ram);
        public abstract Builder setStorage(String storage);
        public abstract Builder setGPU(String gpu);
        public abstract Builder setMotherboard(String motherboard);

        // 最终构建方法
        public abstract Computer build();
    }

    // 具体建造者(实现抽象接口)
    public static class ComputerBuilder extends Builder {
        
        @Override
        public Builder setCPU(String cpu) {
            computer.setCpu(cpu);
            return this;
        }

        @Override
        public Builder setRAM(String ram) {
            computer.setRam(ram);
            return this;
        }

        @Override
        public Builder setStorage(String storage) {
            computer.setStorage(storage);
            return this;
        }

        @Override
        public Builder setGPU(String gpu) {
            computer.setGpu(gpu);
            return this;
        }

        @Override
        public Builder setMotherboard(String motherboard) {
            computer.setMotherboard(motherboard);
            return this;
        }

        @Override
        public Computer build() {
            return computer;
        }
    }
}

定义指挥者


public class ComputerDirector {

    public Computer constructHighEndComputer(Computer.Builder builder) {
        return builder.setCPU("AMD Ryzen 9 7950X")
                .setRAM("32GB DDR5 6000MHz")
                .setStorage("2TB PCIe 4.0 NVMe SSD")
                .setGPU("AMD Radeon RX 7900 XTX")
                .setMotherboard("X670E AORUS Master")
                .build();
    }

    public Computer constructOfficeComputer(Computer.Builder builder) {
        return builder.setCPU("Intel Core i5-13400")
                .setRAM("16GB DDR4 3200MHz")
                .setStorage("512GB SSD")
                .setGPU("Intel UHD Graphics 730") // 集成显卡
                .setMotherboard("B760M AORUS Elite AX")
                .build();
    }

}

测试

public class Client {

    public static void main(String[] args) {
        ComputerDirector director = new ComputerDirector();

        // 构建游戏电脑
        Computer gamingPC = director.constructHighEndComputer(
                new Computer.ComputerBuilder()
        );
        System.out.println("=== 高性能游戏电脑 ===");
        System.out.println(gamingPC);

        // 构建办公电脑
        Computer officePC = director.constructOfficeComputer(
                new Computer.ComputerBuilder()
        );
        System.out.println("=== 办公电脑 ===");
        System.out.println(officePC);
    }
}