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

软件工程学习日志2025.11.3

软件设计模式 - 建造者模式实战
• 实验来源:石家庄铁道大学信息学院实验5

• 实验类型:模仿型实验

• 核心目标:深入理解建造者模式的原理并掌握实际应用

🔍 建造者模式核心理解

模式动机

建造者模式的核心价值在于将复杂对象的构建过程与其表示分离。在计算机组装这个典型案例中:
• 复杂对象:计算机(包含CPU、内存、硬盘、主机等多个部件)

• 稳定过程:组装流程固定(安装CPU→内存→硬盘→主机)

• 不同表示:最终产品可以是笔记本或台式机等不同形态

模式优势

  1. 构建过程封装:指挥者统一管理组装流程
  2. 产品表示灵活:相同构建过程可产生不同产品
  3. 符合开闭原则:新增计算机类型只需添加新建造者

🏗️ 系统类图设计

classDiagram
class Computer {
-String cpu
-String memory
-String hardDisk
-String mainFrame
+setCPU(String cpu)
+setMemory(String memory)
+setHardDisk(String hardDisk)
+setMainFrame(String mainFrame)
+show()
}

class ComputerBuilder {<<abstract>>#Computer computer+buildComputer() void+buildCPU() void+buildMemory() void+buildHardDisk() void+buildMainFrame() void+getComputer() Computer
}class LaptopBuilder {+buildCPU() void+buildMemory() void+buildHardDisk() void+buildMainFrame() void
}class DesktopBuilder {+buildCPU() void+buildMemory() void+buildHardDisk() void+buildMainFrame() void
}class Director {-ComputerBuilder builder+setBuilder(ComputerBuilder builder)+construct() Computer
}ComputerBuilder <|-- LaptopBuilder
ComputerBuilder <|-- DesktopBuilder
ComputerBuilder o--> Computer
Director o--> ComputerBuilder

💻 核心代码实现

  1. 产品类 - 计算机实体

/**

  • 计算机产品类 - 代表被构建的复杂对象
    */
    public class Computer {
    private String cpu;
    private String memory;
    private String hardDisk;
    private String mainFrame;

    // Setter方法
    public void setCPU(String cpu) { this.cpu = cpu; }
    public void setMemory(String memory) { this.memory = memory; }
    public void setHardDisk(String hardDisk) { this.hardDisk = hardDisk; }
    public void setMainFrame(String mainFrame) { this.mainFrame = mainFrame; }

    /**

    • 展示电脑配置信息
      */
      public void show() {
      System.out.println("====== 电脑配置信息 ");
      System.out.println("主机:" + mainFrame);
      System.out.println("CPU:" + cpu);
      System.out.println("内存:" + memory);
      System.out.println("硬盘:" + hardDisk);
      System.out.println("
      ===================");
      }
      }
  1. 抽象建造者 - 定义构建接口

/**

  • 抽象建造者 - 定义计算机组装的通用接口
    */
    public abstract class ComputerBuilder {
    protected Computer computer;

    public Computer getComputer() {
    return computer;
    }

    /**

    • 创建计算机实例
      */
      public void buildNewComputer() {
      computer = new Computer();
      }

    // 抽象构建方法
    public abstract void buildMainFrame();
    public abstract void buildCPU();
    public abstract void buildMemory();
    public abstract void buildHardDisk();
    }

  1. 具体建造者 - 笔记本构建器

/**

  • 具体建造者 - 笔记本电脑组装实现
    */
    public class LaptopBuilder extends ComputerBuilder {

    @Override
    public void buildMainFrame() {
    computer.setMainFrame("联想轻薄本专用主板");
    System.out.println("安装笔记本主板...");
    }

    @Override
    public void buildCPU() {
    computer.setCPU("Intel Core i7-1260P 移动版");
    System.out.println("安装笔记本CPU...");
    }

    @Override
    public void buildMemory() {
    computer.setMemory("16GB LPDDR5 4800MHz");
    System.out.println("安装笔记本内存...");
    }

    @Override
    public void buildHardDisk() {
    computer.setHardDisk("1TB NVMe SSD");
    System.out.println("安装笔记本硬盘...");
    }
    }

  1. 具体建造者 - 台式机构建器

/**

  • 具体建造者 - 台式电脑组装实现
    */
    public class DesktopBuilder extends ComputerBuilder {

    @Override
    public void buildMainFrame() {
    computer.setMainFrame("华硕TUF GAMING ATX大板");
    System.out.println("安装台式机主板...");
    }

    @Override
    public void buildCPU() {
    computer.setCPU("AMD Ryzen 7 7700X");
    System.out.println("安装台式机CPU...");
    }

    @Override
    public void buildMemory() {
    computer.setMemory("32GB DDR5 5200MHz");
    System.out.println("安装台式机内存...");
    }

    @Override
    public void buildHardDisk() {
    computer.setHardDisk("2TB SSD + 4TB HDD");
    System.out.println("安装台式机硬盘...");
    }
    }

  1. 指挥者 - 控制构建流程

/**

  • 指挥者 - 控制计算机的组装流程
    */
    public class Director {
    private ComputerBuilder builder;

    public void setBuilder(ComputerBuilder builder) {
    this.builder = builder;
    }

    /**

    • 构建计算机的稳定流程
      */
      public Computer construct() {
      System.out.println("开始组装计算机...");

      builder.buildNewComputer(); // 步骤1:创建新计算机
      builder.buildMainFrame(); // 步骤2:安装主机
      builder.buildCPU(); // 步骤3:安装CPU
      builder.buildMemory(); // 步骤4:安装内存
      builder.buildHardDisk(); // 步骤5:安装硬盘

      System.out.println("计算机组装完成!");
      return builder.getComputer();
      }
      }

  1. 客户端测试代码

/**

  • 客户端测试类
    */
    public class Client {
    public static void main(String[] args) {
    // 创建指挥者
    Director director = new Director();

     System.out.println("=== 组装笔记本电脑 ===");// 组装笔记本电脑ComputerBuilder laptopBuilder = new LaptopBuilder();director.setBuilder(laptopBuilder);Computer laptop = director.construct();laptop.show();System.out.println("\n=== 组装台式电脑 ===");// 组装台式电脑ComputerBuilder desktopBuilder = new DesktopBuilder();director.setBuilder(desktopBuilder);Computer desktop = director.construct();desktop.show();// 验证两个计算机对象不同System.out.println("两台电脑是否相同: " + (laptop == desktop));
    

    }
    }

🎯 运行结果示例

=== 组装笔记本电脑 ===
开始组装计算机...
安装笔记本主板...
安装笔记本CPU...
安装笔记本内存...
安装笔记本硬盘...
计算机组装完成!
====== 电脑配置信息 ======
主机:联想轻薄本专用主板
CPU:Intel Core i7-1260P 移动版
内存:16GB LPDDR5 4800MHz
硬盘:1TB NVMe SSD

=== 组装台式电脑 ===
开始组装计算机...
安装台式机主板...
安装台式机CPU...
安装台式机内存...
安装台式机硬盘...
计算机组装完成!
====== 电脑配置信息 ======
主机:华硕TUF GAMING ATX大板
CPU:AMD Ryzen 7 7700X
内存:32GB DDR5 5200MHz
硬盘:2TB SSD + 4TB HDD

两台电脑是否相同: false

📝 编程规范实践总结

代码规范要点

  1. 命名规范:类名大驼峰,方法名小驼峰
  2. 访问控制:属性private,建造者引用protected
  3. 注释完整:每个类和方法都有JavaDoc说明
  4. 包结构清晰:相关类组织在合适包中
  5. 格式统一:一致的缩进和代码风格

设计模式最佳实践

  1. 单一职责:每个类职责明确
  2. 依赖倒置:依赖于抽象而非具体实现
  3. 开闭原则:易于扩展新的建造者

💡 学习收获与反思

掌握程度评估

• ✅ 理解了建造者模式的结构和动机

• ✅ 能够绘制标准的UML类图

• ✅ 实现了完整的代码示例

• ✅ 遵循了编程规范要求

实际应用思考

建造者模式不仅适用于计算机组装,在软件开发中还有很多应用场景:
• 文档生成器(HTML、PDF等不同格式)

• 餐饮订单系统(不同套餐组合)

http://www.jsqmd.com/news/30336/

相关文章:

  • day05-智能换脸-12306出行建议-提取音频工作流
  • x./AC自动机
  • P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题
  • SQL Server 并发控制 第四篇:Snapshot Isolation (SI) 和 Read Committed Snapshot Isolation (RCSI)
  • godot 描边插件
  • 怎么在现有App里融入AI对话能力
  • DFS 序 O(1) 求 LCA
  • @pytest.fixture和setup/teardown
  • 矿山通信如何实现全域一体化?迈威为煤矿装上了“智慧神经网络”
  • Java异常处理实战精要:构建稳定应用的基石
  • €$P2025
  • CSP2025 补题
  • 哈希学习总结
  • 142.环形链表 II
  • 2025 年 11 月制冷设备厂家推荐排行榜,小型制冷设备,空调制冷设备,工业制冷设备,商用制冷设备,大型制冷设备,制冷设备安装与维修服务公司推荐
  • 从创作到分析全搞定!2025公众号效率工具深度测评,这波升级95%的人还不知道
  • 20232304 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • k8s-java应用部署(4)
  • 指数函数和对数函数
  • 2025-11-03 早报新闻
  • 单目三角化原理 - MKT
  • [CEOI 2017] Sure Bet
  • Java数组——三种初始化及内存分析,数组的基本特点,下标越界与小结
  • LeRobot v0.4.0 正式发布:全面提升开源机器人的学习能力
  • QPS、TPS、PV、UV、并发量
  • 补码加减法
  • 今天总结
  • whk 笔记
  • 冬月做题记录
  • 11月3号