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

类图+案例+代码详解:软件设计模式----生成器模式(建造者模式)

生成器模式(建造者模式)

把复杂对象的建造过程和表示分离,让同样的建造过程可以创建不同的表示。

请添加图片描述

假设你去快餐店买汉堡,汉堡由面包、肉饼、蔬菜、酱料等部分组成。

建造者模式的角色类比:

  1. 产品(Product):汉堡
    (由多个部分组成的复杂对象)
  2. 抽象建造者(Builder):汉堡建造接口
    (定义 “放面包”“放肉饼”“放蔬菜”“放酱料” 等建造步骤)
  3. 具体建造者(ConcreteBuilder):鸡肉堡建造者、牛肉堡建造者
    (分别实现不同汉堡的建造步骤,比如鸡肉堡放鸡腿肉,牛肉堡放牛肉饼)
  4. 指挥者(Director):服务员
    (告诉建造者 “先放面包→再放肉饼→加蔬菜→加酱料”,控制建造顺序)

为什么要用建造者模式?

  • 场景对比:
    • 不用模式时: 直接 new 一个汉堡对象,要一次性传所有参数(面包类型、肉饼种类、蔬菜数量…),代码又长又容易错。
    • 用建造者模式: 像 “组装乐高” 一样,一步步造汉堡,每个步骤独立,最后由指挥者按顺序组装。

核心优势

  1. 解耦建造过程和产品表示:比如造 “豪华汉堡” 和 “普通汉堡”,可以复用相同的建造流程,只修改部分步骤。
  2. 简化复杂对象创建:避免 “巨量参数构造函数”,代码更清晰。
  3. 方便扩展新产品:新增 “素食汉堡” 时,只需新建一个建造者,不修改原有逻辑。

代码示例

// 1. 产品:汉堡  
class Hamburger {private String bread;private String meat;private String veggies;private String sauce;// 省略getter/setter,用Builder模式时很少直接操作这些字段
}// 2. 抽象建造者:定义建造步骤  
interface HamburgerBuilder {void buildBread();void buildMeat();void buildVeggies();void buildSauce();Hamburger getHamburger();
}// 3. 具体建造者:鸡肉堡建造者  
class ChickenBurgerBuilder implements HamburgerBuilder {private Hamburger hamburger = new Hamburger();@Overridepublic void buildBread() { hamburger.setBread("芝麻面包"); }@Overridepublic void buildMeat() { hamburger.setMeat("炸鸡腿肉"); }@Overridepublic void buildVeggies() { hamburger.setVeggies("生菜+番茄"); }@Overridepublic void buildSauce() { hamburger.setSauce("番茄酱"); }@Overridepublic Hamburger getHamburger() { return hamburger; }
}// 4. 指挥者:服务员,控制建造顺序  
class Waiter {private HamburgerBuilder builder;public Waiter(HamburgerBuilder builder) {this.builder = builder;}// 定义“标准汉堡”的建造流程  public Hamburger buildStandardHamburger() {builder.buildBread();builder.buildMeat();builder.buildVeggies();builder.buildSauce();return builder.getHamburger();}
}// 使用示例  
public class BuilderDemo {public static void main(String[] args) {// 要鸡肉堡?找鸡肉堡建造者+服务员  HamburgerBuilder chickenBuilder = new ChickenBurgerBuilder();Waiter waiter = new Waiter(chickenBuilder);Hamburger chickenBurger = waiter.buildStandardHamburger();System.out.println("建造了一个:" + chickenBurger.getBread() + " + " + chickenBurger.getMeat() + " + " + chickenBurger.getVeggies() + " + " + chickenBurger.getSauce());}
}
  1. 建造者模式和工厂模式的区别

    • 工厂模式:“一步到位” 创建简单对象(如直接 new 一个汉堡)。
    • 建造者模式:“分步组装” 创建复杂对象(如分步骤造汉堡的各个部分)。
  2. 实际场景举例

    • JDK 中的StringBuilder(一步步 append 字符,最后 toString ())。
    • SQL 语句构建(分步骤拼表名、条件、排序,避免 SQL 注入)。
http://www.lryc.cn/news/577295.html

相关文章:

  • 炸鸡派-基础测试例程
  • STM32 驱动 ADS1015 单端 差分 多通道模式 ADC 转换
  • 海康相机总是抓取前一帧图像
  • jenkins集成sonarqube(使用token进行远程调用)
  • ShardingSphere完成MySQL集群部署
  • RK3588高性能处理器核心技术解析
  • MLOps 基础:驯服模型生命周期的科学
  • GitHub Actions 入门指南:从零开始自动化你的开发流程
  • 手机屏暗点缺陷修复及相关液晶线路激光修复原理
  • 超大js文件多层级引用缓存在网络较差的时候无法调用使用问题
  • BERT 模型详解:结构、原理解析
  • RWKV-8 系列之 DeepEmbedAttention:精简 KV 缓存,尤其适合混合模型(RWKV-7s)
  • MySQL 慢查询日志详解
  • 小白excel中使用VBA
  • [国家电网备考]操作系统
  • 飞算JavaAI 2.0.0深度测评:自然语言编程如何重构开发生产力?
  • 《微信生态裂变增长利器:推客小程序架构设计与商业落地》
  • 【Python使用】嘿马云课堂web完整实战项目第2篇:CMS页面管理需求,后端工程搭建【附代码文档】
  • SpringCloud系列(42)--搭建SpringCloud Config分布式配置总控中心(服务端)
  • 鸿蒙5:组件状态共享
  • STM32-第一节-新建工程,GPIO,点亮LED,蜂鸣器
  • 七天学会SpringCloud分布式微服务——05——OpenFeign
  • Hadoop WordCount 程序实现与执行指南
  • 大数据(3)-Hive
  • 【时时三省】vectorcast使用教程
  • 烘焙工业4.0:自动化升级与制造执行MES系统的深度赋能
  • 【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动
  • 【原创】【5】【视频二创工具发布】基于视觉模型+FFmpeg+MoviePy实现短视频自动化二次编辑+多赛道
  • 国产车哪款有远程代驾功能?远程代驾+自动驾驶
  • 【Wireshark】高级过滤技巧精讲