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

地表最强之Android微信语音/腾讯会议通话录音 阅读详情

一、什么是建造者模式?

  • 建造者模式(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 其他创建型模式

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

九、总结

  • 建造者模式是一种专注于复杂对象构造步骤与过程的创建型设计模式
  • 核心在于将对象的构造过程拆分为多个步骤,并通过建造者类进行封装
  • 通过引入抽象建造者、具体建造者、可选的导演类,我们可以灵活地构造出多种变种的复杂对象
  • 优点包括:构造灵活、避免参数膨胀、支持多样化配置、代码清晰可维护
  • 缺点则是类的数量增加、设计复杂度上升
  • 建造者模式在游戏开发(如关卡、角色、技能)、网络请求、配置管理等领域有广泛应用
Python全栈入门到实战【JavaScript篇 15】async/await与Fetch API,打通前后端数据通道 Fetch API是浏览器内置的现代HTTP请求接口,用于向服务器发送请求并获取响应。它是(XHR)的替代品。学习Fetch的目标非常明确——用JS从后端API获取数据,并渲染到前端页面。这标志着前后端数据通道的打通,是实现全栈开发的核心技能。try {// 等待Promiseconst parallel = await Promise.all([ // 并行等待]); 阅读详情

相关推荐

基于Isaac Gym与PPO算法的机械臂抓取任务仿真与强化学习实战(附完整代码与训练策略)

本文详细介绍了基于Isaac Gym与PPO算法的机械臂抓取任务仿真与强化学习实战。通过环境搭建、PPO算法实现、奖励函数设计等核心环节的优化,结合完整代码与训练策略,显著提升机械臂抓取效率与成功率。特别适合开发者快速掌握强化学习在机器人控制领域的应用。

weixin_29256771的博客 599

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

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

lixld的专栏 271

SIwave仿真手册——软件基础(一)

最近在学习SIWAVE,在这里将自己的笔记整理一下,做一个专题。希望对大家有帮助,这个会持续更新的。仅限于软件操作学习,不涉及信号完整性的讨论。

luohuo9844的博客 4万+

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

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

zxcyxg123的博客 152

Cocos Creator 3D音频定位实战:从原理到沉浸感实现

3D音频定位是游戏开发中实现沉浸感的关键技术,其核心原理基于HRTF(头部相关传输函数)模型,模拟声音在空间中的传播与双耳感知差异。这项技术通过赋予声音空间坐标、距离衰减和方向属性,将音频从背景元素提升为可交互的环境线索,极大增强了虚拟世界的真实感与玩家的空间认知。在工程实践中,开发者需要深入理解声源、听者、衰减曲线与多普勒效应等基础概念,并合理运用音频池、优先级管理与动态混音等技术手段来平衡效果与性能。对于Cocos Creator开发者而言,无论是使用引擎原生的AudioSource组件构建轻量级方案,

weixin_30972263的博客 291

【OCCT】第3讲 OpenCasCade&VTK实现三维建模Demo

本文分享OpenCasCade&VTK共同实现三维建模Demo,希望对各位小伙伴有所帮助!1. 新建Visual Studio工程新建空项目添加main.cpp添加main函数2. 配置OpenCasCade & VTK 库配置包含路径:配置库文件:添加链接库:添加运行环境:注意:VTK库的版本要与编译OpenCasCade库时选择的版本一致,否则会出错!

qq_40041064的博客 779

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

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

茶色喵的博客 919

LangGraph实战训练营-打造 WhatsApp 全自动消息收发AI智能助手

本文系统梳理了项目架构(WhatsApp Bridge + Talon Host + LangGraph Agent Harness三层设计)、完整环境搭建流程(Docker/本地双模式部署)、核心原理(WhatsApp桥接机制、NVIDIA Parakeet语音转录管线、Cron定时调度、Agent图状状态机),并提供了基础对话、文件操作、语音处理、定时任务等六大实战示例。同时涵盖安全策略、性能优化、数据备份等生产级运维实践,以及十个高频问题的排查方案。

program哲学 190

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

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

WU4566285的博客 540

PyTorch实战:卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类

PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。

master_hunter的博客 8933

第八节:Orin NX 修改pinmux

读SPI1对应的寄存器,看对应的GPIO口是否被复用为SPI功能。说明GPIO口的功能已经被复用为SPI。烧录或者命令行烧录,都是根据。这里我们把文件统一命名成。文件,Orin NX的。测试SPI功能,基于。

孤独旅客的博客 792

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

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

keep simple 816

uniapp [全端兼容] - 详细实现人脸识别和活体检测功能,实时监测人脸是否进入区域及动作是否正确播报,免费自动提示引导动作及语音,提供提供实名认证、身份证识别、人脸信息采集、刷脸扫脸认证示例代码

uniapp,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,人脸识别,扫脸认证,人脸认证,活体认证,身份认证,uni-app人脸识别详细教程,如何在app端实现免费人脸识别教程,如何在小程序端做,最好用的插件,安卓ios百度人脸识别、活体检测、人脸采集APP,H5人脸识别带前后摄像头,适合新手看的人脸识别功能教程,详细示例代码源码,有没有免费的,接入百度,阿里云人脸识别,百度,api,活体检测,数据采集,动作提示指引,语音提示指引,报错,无法核验一直出错,根本用

🏆 前端领域优质创作者 1万+

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

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

flzjkl的博客 1522

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

SmileTimLi的博客 535

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

учёба 1102

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

设计模式(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、付费专栏及课程。

余额充值