设计模式之建造者模式

目录

定义

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

结构

适用场景

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);
    }
}
相关推荐
java_t_t3 分钟前
集合工具类
java·集合
消失的旧时光-19438 分钟前
ScheduledExecutorService
android·java·开发语言
勇闯逆流河9 分钟前
【C++】用红黑树封装map与set
java·开发语言·数据结构·c++
SpiderPex30 分钟前
论MyBatis和JPA权威性
java·mybatis
小猪咪piggy1 小时前
【微服务】(1) Spring Cloud 概述
java·spring cloud·微服务
lkbhua莱克瓦241 小时前
Java基础——面向对象进阶复习知识点8
java·笔记·github·学习方法
m0_736927041 小时前
Spring Boot自动配置与“约定大于配置“机制详解
java·开发语言·后端·spring
GL-Yang2 小时前
2025年-集合类面试题
java·面试
你不是我我2 小时前
【Java 开发日记】我们来说一说 Redisson 的原理
java·开发语言
李憨憨2 小时前
Java处理大型 Excel 文件(超过 100 万行)难题
java