创建型设计模式之建造者模式

手把手教你用Ubuntu Base 20.04打造轻量级ARM开发板根文件系统(附常见问题解决) 本文详细介绍了如何基于Ubuntu Base 20.04 LTS构建轻量级ARM开发板根文件系统,涵盖环境准备、镜像制作、跨架构配置、软件包定制及常见问题解决。通过实战指南,开发者可快速掌握ARM架构下的根文件系统构建技巧,优化系统性能并解决部署中的典型问题。 阅读详情

一、什么是建造者模式?

  • 建造者模式(Builder Pattern),也称为生成器模式,是一种创建型设计模式。
  • 与之前学习的工厂方法模式和抽象工厂模式不同,建造者模式更关注对象构建的步骤与过程,而不是单纯的结构或分类。
  • 它适合用于构建复杂对象,尤其是当该对象的构造涉及多个组成部分或配置步骤,并且我们希望灵活地组合这些部分以生成不同变种的对象。

二、建造者模式的核心思想

将一个复杂对象的构造过程与其表示分离,使得同样的构造过程可以创建不同的表示(即不同配置的对象)。

  • 建造者模式通过拆分构造步骤,让开发者可以按需、灵活地组合各个部分,从而构造出多样化的对象。
  • 强调的是“如何一步一步构建出对象”,而不是一次性通过一个庞大的构造函数生成。

三、以游戏关卡制作为例理解建造者模式

1. 场景描述

  • 我们正在开发一款战斗闯关类游戏,游戏由多个**关卡(Level)**组成。
  • 每个关卡包含以下要素(即对象的组成部分):
    • 敌人(Enemies)
    • 障碍物(Obstacles)
    • 道具(Items)

2. 关卡类的基本结构

class Level {
public:
    std::vector<Enemy> enemies;
    std::vector<Obstacle> obstacles;
    std::vector<Item> items;
};
  • 直接在构造函数中为这些字段赋值会缺乏灵活性,尤其是当我们要生成多种不同配置的关卡时(如简单、困难、特殊事件关卡等)。

3. 建造者模式解决方案

(1) 抽象建造者(Builder Interface)
  • 定义一个抽象接口 LevelBuilder(关卡生成器),约定构建关卡所需的各个步骤方法:
    • addEnemies(...)
    • addObstacles(...)
    • addItems(...)
    • getLevel():返回最终构建完成的 Level 对象

相当于定义了“我要能设置敌人、障碍、道具,最后能拿到一个完整的关卡”的能力。

(2) 具体建造者(Concrete Builder)
  • 实现抽象建造者接口,如 SimpleLevelBuilder(简单关卡生成器)。
  • 在具体实现中,将传入的内容添加到对应的 Level 对象中,比如:
    • 将敌人列表加入 enemies
    • 将障碍物加入 obstacles
    • 将道具加入 items
  • 最后通过 getLevel() 返回构建完成的关卡对象
(3) 导演类(Director,可选)
  • 负责控制建造步骤的执行顺序,调用建造者的方法来按步骤构造对象。
  • 可以配置不同的建造者(如简单/困难建造者),从而生成不同类型的关卡。
  • 导演类也可以接收一个 Builder 对象作为参数,从而实现同一套构建流程,生成不同内容/难度的关卡。

导演类相当于一个“包工头”,它知道先做什么后做什么,但不关心具体是谁来做(即哪个具体的建造者)。

(4) 客户端调用
  • 客户端代码通过导演类或直接操作建造者对象,来一步步构造出所需的关卡对象。
  • 可以灵活地生成多种变种的关卡,而无需修改关卡类本身或构造函数。

四、建造者模式的构成要素总结

要素说明示例(游戏关卡场景)
目标产品(Product)最终要构建的复杂对象Level(关卡对象,包含敌人/障碍/道具)
抽象建造者(Builder Interface)定义构建产品各个部分的接口方法LevelBuilder,包含 addEnemies()、addObstacles()、getLevel()
具体建造者(Concrete Builder)实现抽象建造者,负责实际构建过程SimpleLevelBuilder,实现各方法并填充具体内容
导演类(Director,可选)控制建造流程,调用建造者方法,组织构建步骤可配置不同建造者,生成不同关卡;也可省略

🎯 关键点: 建造者模式通过拆分构造步骤 + 封装构建过程,让我们可以灵活地构造复杂对象的不同变种。

五、建造者模式的优点

  1. 简化构造参数
    • 拆分单个类的构造任务到多个生成器步骤,避免函数臃肿。
  2. 灵活组合步骤
    • 通过对构造任务的单一职责拆分,我们可以解耦构造过程,从而使用组合灵活地产出更多变种的产品。
  3. 动态感知构造过程
    • 借助导演,可以在运行时根据建造过程调整各部分任务,暂缓创建或执行递归构造。

六、建造者模式的缺点

  1. 类的数量增多

    • 引入了抽象建造者、具体建造者、可能还有导演类,导致整体类结构变复杂
    • 对于简单对象,使用建造者模式可能显得“杀鸡用牛刀”
  2. 代码复杂度上升

    • 相比直接使用构造函数或工厂模式,建造者模式的设计层次更丰富,理解成本略高
  3. 灵活性带来的代价

    • 虽然灵活,但也增加了构建过程的控制逻辑,需合理设计以避免过度设计

⚠️ 注意: 这些缺点也是大多数设计模式共有的“通病”——为了更高的灵活性和扩展性,引入了更多的抽象和类。

七、建造者模式的典型应用场景

1. 游戏开发

  • 游戏关卡生成
  • 游戏角色创建
  • 技能系统、装备合成等复杂对象的构造

2. HTTP 请求构造

  • 构建一个 HTTP 请求,通常需要设置:
    • URL
    • 请求方法(GET/POST)
    • 请求头(Headers)
    • 请求体(Body)
  • 使用建造者模式可以链式地、按步骤地设置这些参数,最后发起请求

3. 复杂配置对象 / 配置文件构建

  • 比如构建一个 JSON 配置、XML 文件、数据库连接配置等
  • 各部分参数多且可选,适合拆分构造步骤

4. 游戏/应用中的场景加载与反序列化

  • 从文件加载复杂场景数据,可能涉及递归解析、对象树构建、数据校验等
  • 导演类可负责统一流程控制,建造者负责具体节点的创建

八、建造者模式 vs 其他创建型模式

对比维度工厂方法模式抽象工厂模式建造者模式
关注点创建单一产品,强调“由谁创建”创建一族相关产品,强调“多维度分类”创建复杂对象,强调“构建步骤与过程”
适用场景产品类型单一,如不同角色的武器多维度产品族,如武器+防具构造复杂对象,如关卡、请求、配置等
核心目标简化对象创建,统一创建接口提供成套相关对象的创建能力分步骤构造复杂对象,支持灵活组合
灵活性适用于简单对象创建适用于多系列产品构造适用于构造过程复杂、需灵活配置的对象

九、总结

  • 建造者模式是一种专注于复杂对象构造步骤与过程的创建型设计模式
  • 核心在于将对象的构造过程拆分为多个步骤,并通过建造者类进行封装
  • 通过引入抽象建造者、具体建造者、可选的导演类,我们可以灵活地构造出多种变种的复杂对象
  • 优点包括:构造灵活、避免参数膨胀、支持多样化配置、代码清晰可维护
  • 缺点则是类的数量增加、设计复杂度上升
  • 建造者模式在游戏开发(如关卡、角色、技能)、网络请求、配置管理等领域有广泛应用
Star CCM+中的物性参数(定值、多项式、查表) 仿真过程中我们一定会遇到设置物性参数的问题,对于固定的物性参数还好说,直接输入一个固定的值即可。但是对于冷却液、气体、两相流等,物性参数是随着温度或温度和压力变化的。此时就涉及到多项式和查表。首先创建物理连续体,选择计算模型。 阅读详情

相关推荐

避坑指南:用pygrib处理ERA5气象数据时遇到的5个典型问题

本文总结了使用pygrib库处理ERA5气象GRIB数据时常见的五个典型问题及解决方案,涵盖数据获取、内存管理、时间处理、空间插值和性能优化。重点针对气象数据插值这一核心挑战,提供了处理不规则网格、缺失值和跨日期变更线的实用代码示例与优化策略,帮助用户高效、稳定地完成气象数据分析工作。

weixin_28224217的博客 185

Design-pattern 创建型设计模式-Builder建造者模式

建造者模式|构建者模式|生成器模式 实际上,建造者模式的原理和代码实现非常简单,掌握起来并不难,难点在于应用场景。 比如,你有没有考虑过这样几个问题:直接使用构造函数或者配合 set 方法就能创建对象,为什么还需要建造者模式来创建呢? 建造者模式和工厂模式都可以创建对象,那它们两个的区别在哪里呢? 当创建一个对象是,构造函数参数很多,并且参数之间有逻辑关系。此时构造函数列表列表变的很长,代码在可读性和易用性上变差。在使用构造函数的时候,容易搞错各参数的顺序。传递进去错误的参数值,导致非常隐蔽的bug

lixld的专栏 271

无人机:DJI Matrice 200 Series_(13).行业应用案例分析

在前一节中,我们介绍了DJI Matrice 200系列无人机的基本硬件配置和性能参数。本节将通过具体的行业应用案例,分析如何利用DJI Matrice 200系列无人机进行二次开发,以满足不同行业的需求。

zhubeibei168的博客 1448

【设计模式|创建型】建造者模式(Builder Pattern)

假设我们要建造一座房子,这个房子有很多不同的部分,比如墙壁、地板、屋顶等等。我们可以使用建造者模式来创建这座房子。 首先,我们定义一个房子类 House,它有一些属性,比如墙壁、地板和屋顶。然后,我们创建一个建造者类 HouseBuilder,它有一些方法用于构建房子的不同部分。最后,我们创建一个指挥者类 HouseDirector,它负责指导建造者如何构建房子。

zxcyxg123的博客 152

【智能流体力学】使用ANSYS Fluent + SpaceClaim + SCDM制作流体力学前处理的几何模型

生成来源.scdoc文件来自前处理工具生成的模型数据,或在 FLUENT 中创建和保存的模型。生成方式: 通过前处理工具导出网格数据,或在 FLUENT 中设置并保存模型。作用: 用于储存模型的结构信息和设置,确保在 FLUENT 中的正确导入和使用。.x_t文件是 Parasolid 文件格式的扩展名,用于存储三维模型数据。在 ANSYS Fluent 中,这种格式通常用于在前处理工具之间交换几何数据。要创建.x_t。

源代码杀手的博客 3265

2026年国赛C题微网与外部电网电力调控策略 (三):问题三、问题四滚动预测、实时电价与结果核验

专栏内定期更新ABCDE五题详细思路、代码(含运行结果图)和讲解视频-(11号之前半价):问题三看起来只是多给了一个光伏预报附件,实质上它改变了整道题的信息结构:问题四则是在问题二、问题三之上替换价格来源。问题4-2相当于“确定性计划+实时电价”,问题4-3相当于“滚动预测+实时电价”。物理模型完全不变,改变的是价格序列和费用口径。本文先给出核心结果:从结果看,问题3比问题2多约164.21万元,问题4-3比问题4-2多约168.79万元。主要增量不是“储能没有工作”,而是预测误差、计划偏差和紧急购电造成的

YOLO 343

【Java 设计模式 · 创建型】建造者模式(Builder Pattern)

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

茶色喵的博客 919

RK3588开发笔记-ISP模块参数调试

本文详细介绍了基于RK3588平台的ISP模块参数调试流程。主要内容包括:硬件准备(RK3588板卡、IMX415摄像头等)、软件环境搭建(Ubuntu系统、RKISP_Tuner工具)、IMX415摄像头基础使用验证、RKISP2.x Tuner工具的使用方法(新建/加载IQ参数文件、Sensor配置、Raw图采集)以及最终IQ文件的部署。文章重点强调了基础标定的重要性,建议开发者分场景调试并参考官方文档,通过合理配置ISP参数来优化图像质量。该调试流程适用于RK3588平台的图像采集类项目开发。

flypig has a dream! 837

Java GoF 23种设计模式-创建型模式-建造者模式(Builder Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现 一、模式定义 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式又可以称为生成器模式。 建造者模式是一种创建型设计模式, 它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是

WU4566285的博客 540

YOLO项目部署:从Python脚本到Docker容器的企业级交付全流程

YOLO模型企业级Docker部署方案 核心挑战 环境一致性:解决"本地能跑,服务器崩掉"问题 可扩展性:支持单实例到多实例扩展 稳定性:确保99.9%可用性 部署流程 项目改造:模块化代码,分离配置 Docker镜像:支持CPU/GPU环境 API服务:封装推理逻辑 监控告警:实现自动化运维 技术方案 需求 解决方案 环境一致性 Docker镜像+依赖冻结 可扩展性 K8s+负载均衡 稳定性 健康检查+自动重启 项目结构 模块化代码组织 外部化配置管理 精确依赖版本控制 摘要重点:通过

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1230

微信小程序 - 最新实现项目适老化设计全流程及源码,老年模式大字版与常规版页面样式切换,老年人大字模式字体与布局更换关怀版解决方案(新老项目均适用的方案,全局页面统一修改文本字号/DOM排版元素等)

微信小程序,vue2,vue3,老年大字版设计,小程序开发如何实现适老化方案,放大字体字号及改变页面的布局,小程序关怀模式实现思路及代码,统一将布局都改了,全局修改字体大小适配老年人看不清问题,小程序怎么接入老年模式并根据模式改变页面的UI设计,实现全局修改字体大小适老化/关怀版改造,最新详细示例代码全流程,字体放大/缩小,老项目怎么适配老年人模式方案,小程序适老化设计指南,当切换成老年模式时页面所有排版都会发生变化,小程序vue开发,新手详细教程,老年模式字体设置思路和UI布局的设计,开发者可以通过wx.

🏆 前端领域优质创作者 7306

设计模式之创建型:建造者模式

建造者模式是一种​​创建型设计模式​​,用于分步骤构造复杂对象。它通过将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的对象形态。实现方式适用场景关键特点基础建造者模式严格分步骤构造复杂对象(如计算机组装)分离构建过程与表示,通过指挥者控制流程,支持多态化构建扩展建造者模式包含可选参数的对象构造(如用户信息)链式方法设置参数,支持必选/可选字段分离,可添加构建校验逻辑线程安全建造者模式多线程环境下的不可变对象(如配置类)使用方法保证原子性,构造器私有化防止外部修改链式调用简化版。

keep simple 816

【设计模式】【创建型模式】建造者模式(Builder)

分离构建与表示将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。客户端不需要知道对象的具体构建细节。灵活性和可扩展性可以逐步构建对象,支持动态配置。新增构建步骤或修改构建顺序非常方便。代码可读性和可维护性链式调用()使代码更加简洁和直观。将复杂的构建逻辑封装在建造者类中,客户端代码更清晰。避免构造方法参数过多通过逐步设置属性,避免了构造方法参数过长的问题(保证对象的一致性对象在完全构建之前不会被使用,确保对象的一致性和完整性。

flzjkl的博客 1522

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式(六)建造者模式(Builder pattern)-- 创建型

什么是建造者模式? 建造者模式 —> 创建型模式 基本介绍 1) 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。(抽象出来的是建造者,之前一直觉得把产品抽象出来。后面代码会有体现) 2) 建造者模式 是一步一步创建一个复杂的对象...

SmileTimLi的博客 535

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

设计模式基础概念(创建型模式):生成器模式/建造者模式(Builder Pattern)

建造者模式(Builder)是一种创建型设计模式, 使你能够分步骤创建复杂对象。该模式允许你。

учёба 1102

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 建造者模式(Builder) - Java实现

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 建造者模式(Builder) 将一个复杂的构建算法和表示分离,导致同样的构建过程可以建造不同的表示。

Z 509

设计模式(创建型模式)建造者模式

建造者模式的使用

嘉禾嘉宁papa 887

【C#设计模式】3.建造者模式(Builder Pattern)【创建型】

1.1 动机(Motivate) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变? 1.2 意图(Intent) 将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。...............

星Yeah 的博客 4228

设计模式之建造者模式(创建型模式)

前言

qq_37209293的博客 23万+

【设计模式】【创建型模式(Creational Patterns)】之建造者模式(Builder Pattern)

建造者模式是一种非常有用的创建型设计模式,尤其适用于构建复杂的对象。通过将对象的构建过程与其表示分离,建造者模式使得相同的构建过程可以创建不同的表示。封装性:将复杂的构建过程封装在建造者类中,客户端无需知道具体的构建细节。灵活性:可以通过不同的建造者类创建不同类型的产品对象,增加了系统的灵活性。可扩展性:增加新的建造者类时,无需修改现有代码,符合开闭原则。然而,建造者模式也有一些缺点,例如代码量会增加,且在简单对象的构建中可能显得过于复杂。因此,选择是否使用建造者模式应根据具体的需求和场景来决定。

ido1ok的博客 1076

【C++设计模式之建造者模式:创建型】分析及示例

建造者模式通过将一个复杂对象的构建过程拆分成多个简单的部分,并由不同的建造者构建每个部分,最终组装成整的对象。这种方式可以灵活地构建不同的对象表示,同时封装了对象的构建过程。

FreeLikeTheWind的博客 630

【设计模式】创建型模式(四):建造者模式

建造者模式 是一种创建型设计模式,它允许你创建复杂对象的步骤与表示方式相分离。建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离,从而可以创建具有不同表示形式的对象。

Data · Model · Agent · Repeat 1694

23种设计模式【创建型模式】详细介绍之【建造者模式】

设计模式。

『愚』的博客 971

设计模式:创建型模式--建造者模式(Builder Pattern)

设计模式:创建型模式–建造者模式(Builder Pattern) 文章目录设计模式:创建型模式--建造者模式(Builder Pattern)1. 概述2. 组成结构3. 具体实例4. 优缺点5. 使用场景6. 模式扩展7. 对比其他创建型模式7.1 工厂模式 vs 建造者模式7.2 抽象工厂模式 vs 建造者模式 1. 概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离部件的构造(由Builder负责)和装配(由Director负责),从而可以构造出复杂的对象。 实现了

ZZay's 554

设计模式(004)创建型之建造者模式

建造者模式(BuilderPattern)是一种创建型设计模式,用于将一个复杂对象的构建过程和其表示分离开来,从而使同样的构建过程可以创建不同的表示。Builder模式主要包括Builder,Director,Product三个角色。

ThinkCockpit的博客 142
上一篇: 创建型设计模式之抽象工厂模式
下一篇: 创建型设计模式之原型模式
WDaMu
博客等级 码龄4年 27粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值