当前位置: 首页 > news >正文

5.建造者模式

建造者模式:将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
核心思想:通过分步构建对象,避免构造函数参数过多,提高代码的可读性和灵活性。

假设你正在开发一个电脑定制系统,用户可以根据自己的需求选择不同的硬件配置(如CPU、内存、硬盘、显卡等)。电脑的配置组合非常复杂,如果使用传统的构造函数或Setter方法,会导致代码冗长且难以维护。建造者模式可以很好地解决这个问题。


1. 产品类 (Computer)

public class Computer {
    private String cpu;
    private String memory;
    private String storage;
    private String gpu;

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public void setStorage(String storage) {
        this.storage = storage;
    }

    public void setGpu(String gpu) {
        this.gpu = gpu;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", memory='" + memory + '\'' +
                ", storage='" + storage + '\'' +
                ", gpu='" + gpu + '\'' +
                '}';
    }
}

2. 建造者接口 (ComputerBuilder)

public interface ComputerBuilder {
    void buildCpu();
    void buildMemory();
    void buildStorage();
    void buildGpu();
    Computer getComputer();
}

3. 具体建造者 (GamingComputerBuilderOfficeComputerBuilder)

游戏电脑建造者
public class GamingComputerBuilder implements ComputerBuilder {
    private Computer computer;

    public GamingComputerBuilder() {
        this.computer = new Computer();
    }

    @Override
    public void buildCpu() {
        computer.setCpu("Intel i9");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("32GB DDR5");
    }

    @Override
    public void buildStorage() {
        computer.setStorage("1TB SSD");
    }

    @Override
    public void buildGpu() {
        computer.setGpu("NVIDIA RTX 4090");
    }

    @Override
    public Computer getComputer() {
        return computer;
    }
}
办公电脑建造者
public class OfficeComputerBuilder implements ComputerBuilder {
    private Computer computer;

    public OfficeComputerBuilder() {
        this.computer = new Computer();
    }

    @Override
    public void buildCpu() {
        computer.setCpu("Intel i5");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("16GB DDR4");
    }

    @Override
    public void buildStorage() {
        computer.setStorage("512GB SSD");
    }

    @Override
    public void buildGpu() {
        computer.setGpu("Integrated GPU");
    }

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

4. 指挥者 (ComputerDirector)

public class ComputerDirector {
    private ComputerBuilder computerBuilder;

    public ComputerDirector(ComputerBuilder computerBuilder) {
        this.computerBuilder = computerBuilder;
    }

    public void constructComputer() {
        computerBuilder.buildCpu();
        computerBuilder.buildMemory();
        computerBuilder.buildStorage();
        computerBuilder.buildGpu();
    }

    public Computer getComputer() {
        return computerBuilder.getComputer();
    }
}

5. 客户端代码

public class ComputerBuilderDemo {
    public static void main(String[] args) {
        // 创建游戏电脑
        ComputerBuilder gamingBuilder = new GamingComputerBuilder();
        ComputerDirector gamingDirector = new ComputerDirector(gamingBuilder);
        gamingDirector.constructComputer();
        Computer gamingComputer = gamingDirector.getComputer();
        System.out.println("游戏电脑配置: " + gamingComputer);

        // 创建办公电脑
        ComputerBuilder officeBuilder = new OfficeComputerBuilder();
        ComputerDirector officeDirector = new ComputerDirector(officeBuilder);
        officeDirector.constructComputer();
        Computer officeComputer = officeDirector.getComputer();
        System.out.println("办公电脑配置: " + officeComputer);
    }
}

6. 输出

游戏电脑配置: Computer{cpu='Intel i9', memory='32GB DDR5', storage='1TB SSD', gpu='NVIDIA RTX 4090'}
办公电脑配置: Computer{cpu='Intel i5', memory='16GB DDR4', storage='512GB SSD', gpu='Integrated GPU'}

业务场景总结

  1. 问题:电脑配置复杂,直接使用构造函数或Setter方法会导致代码冗长且难以维护。

  2. 解决方案:使用建造者模式,将电脑的构建过程分解为多个步骤,并通过指挥者统一管理。

  3. 优点

    • 分离构建过程与表示,代码更清晰。

    • 支持灵活扩展,新增配置类型只需增加新的建造者。

    • 避免构造函数参数过多,提高代码可读性。


其他业务场景

  1. 订餐系统:用户可以选择不同的菜品组合(如主食、饮料、甜点),建造者模式用于构建订单。

  2. 文档生成:生成复杂的文档(如PDF、Word),建造者模式用于分步构建文档内容。

  3. 车辆制造:汽车的不同配置(如发动机、轮胎、内饰),建造者模式用于构建车辆对象。

建造者模式的核心思想是分步构建复杂对象,适用于需要灵活创建对象的场景。

相关文章:

  • vSphere 克隆 Windows 虚拟机后无法访问文件共享的解决方案
  • Maven | 站在初学者的角度配置
  • vue3单独引用element-plus的Infinite Scroll无限滚动;vue3自定义指令
  • 一、Redis简介篇
  • 【操作系统安全】任务5:Windows 文件与文件系统
  • 解锁淘宝分类宝藏:深入探索“cat_get”接口的力量
  • vue3 elementUi table自由渲染组件
  • 使用computed计算属性实现购物车勾选
  • 【leetcode hot 100 105】从前序与中序遍历序列构造二叉树
  • 【从零开始】Air780EPM的LuatOS二次开发——OneWire协议调试注意事项!
  • C++之list类及模拟实现
  • 《C#上位机开发从门外到门内》3-5:基于FastAPI的Web上位机系统
  • 【NLP】 1. 文本在计算机里的表示: One-Hot, sparse vector, bag of words
  • MCU的应用场景:从智能家居到工业控制
  • 【Go】无法访问 proxy.golang.org 进行依赖下载
  • spring bean的生命周期和循环依赖
  • 量子信息理论入门:探索量子世界的奇妙信息处理方式
  • .gitignore 文件用于 Git 应忽略的文件夹的格式
  • 详细讲一下 Webpack 主要生命周期钩子流程(重难点)
  • SpringBoot美发门店管理系统开发与设计
  • 谢震业领衔挑战世界顶尖高手,这场长三角田径钻石赛值得期待
  • 韩代总统李周浩履职
  • 五一当天1372对新人在沪喜结连理,涉外婚姻登记全市铺开
  • 微博:严厉打击对肖某董某事件蹭炒热点、编造故事博流量等行为
  • 国务院任免国家工作人员:颜清辉任人社部副部长
  • 湖北鄂州通报4所小学学生呕吐腹泻:供餐企业负责人被采取强制措施