“对象创建”模式——构建器

2023-10-27

动机

在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?

模板定义

将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。

结构

在这里插入图片描述

要点总结

  1. Builder 模式主要用于“分步骤构建一个复杂的对象”。在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。
  2. 变化点在哪里,封装哪里—— Builder模式主要在于应对“复杂对象各个部分”的频繁需求变动。其缺点在于难以应对“分步骤构建算法”的需求变动。
  3. 在Builder模式中,要注意不同语言中构造器内调用虚函数的差别(C++ vs. C#)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“对象创建”模式——构建器 的相关文章

  • Java复习-25-单例设计模式

    单例设计模式 目的 使用场景 在实际开发下 会存在一种情况 某一种类在程序的整个生命周期中 只需要实例化一次就足够了 例如 系统数据类 由于操作系统只有一个 因此在程序初始化时该类只需要实例化一次 之后的系统数据更改都是在这一个实例化对象中
  • Chain of Responsibility:责任链模式

    现有多个处理者 这些处理者可以处理不同的请求 这些处理者有等级关系 每个处理者都有更上级的处理者 对于最上级的处理者 可以没有上级 对于一个上级处理者 可以有多个下级处理者 客户端发出了一个请求 请求被传递给一个最下级处理者 而该处理者无法
  • 设计模式三: 代理模式(Proxy) -- JDK的实现方式

    简介 代理模式属于行为型模式的一种 控制对其他对象的访问 起到中介作用 代理模式核心角色 真实角色 代理角色 按实现方式不同分为静态代理和动态代理两种 意图 控制对其它对象的访问 类图 实现 JDK自带了Proxy的实现 下面我们先使用JD
  • C++设计模式(二)观察者模式

    1 观察者模式知识点 1 定义 定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变的时候 所有依赖它的对象都得到通知并自动更新 2 动机 将一个系统分割成一系列相互协作的类有一个常见的副作用 需要维护相关对象间的一致性 我们不希望为
  • 计算资源合并模式——云计算架构常用设计模式

    背景 云计算的解决方案中 最初设计可能有意遵循关注点分离的设计原则 把操作分解为独立的计算单元以便可以单独托管和部署 然而 虽然这种策略可以帮助简化解决方案的逻辑实现 但是在同一个应用程序中要部署大量的计算单元 这会增加运行时的托管成本 并
  • C++设计模式-State状态模式

    State状态模式作用 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 UML图如下 State类 抽象状态类 定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteState类 具体状态 每一
  • 设计模式--Abstract server模式 VS Adapter 模式

    适配器类似于现实世界里面的插头 通过适配器 我们可以将分属于不同类的两种不同类型的数据整合起来 而不必去根据某一需要增加或者修改类里面的方法 Adapter mode和Proxymode的区别 Proxy的关注点是职能转移 通过引入Prox
  • 设计模式(十)装饰器模式

    装饰器模式是一种非常有用的结构型模式 它允许我们在不改变类的结果的情况下 为类添加新的功能 我们来举例说明一下 首先添加一组形状 它们都实现了形状接口 public interface Shape String getShape class
  • 每日一问:你想如何破坏单例模式?

    前言 1 单例是什么 单例模式 是一种创建型设计模式 目的是保证全局一个类只有一个实例对象 分为懒汉式和饿汉式 所谓懒汉式 类似于懒加载 需要的时候才会触发初始化实例对象 而饿汉式正好相反 项目启动 类加载的时候 就会创建初始化单例对象 1
  • 单例模式的八种写法比较

    单例模式是最常用到的设计模式之一 熟悉设计模式的朋友对单例模式都不会陌生 一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式 但是除了这两种方式 本文还会介绍其他几种实现单例的方式 让我们来一起看看吧 简介 单例模式是一种常
  • Java设计模式之装饰者设计模式Decorator Pattern

    目录 一 基本概念 二 结构 1 图示 三 案例演示 被装饰对象的基类 一个接口 有cost 和description 两个抽象方法 具体被装饰的对象 实现上面这个接口 装饰者抽象类 基类 实现drink接口 具体的装饰者类 糖 具体装饰者
  • DDD专家张逸:构建领域驱动设计知识体系

    张逸 读完需要 5分钟 速读仅需 2 分钟 领域驱动设计专家 曾就职于 ThoughtWorks 作为 Lead Consultant 为客户提供架构设计 大数据分析 持续交付 代码质量 敏捷管理等咨询服务 著译作包括 软件设计精要与模式
  • 设计模式(不懂)

    面试中经常问到设计模式 我才对这个东西了解了一下 才发现他是没有开发的新大陆 是oo设计的更高级别 能把设计模式搞懂 那oo你就搞的差不多了 随便看了还是很有意思的 虽然不怎么懂 百科名片 相关书籍 设计模式 Design pattern
  • 泛型与反射机制在JDBC和Servlet编程中的实践

    写在前面 泛型与反射是java中的两种强大机制 可以很好的提高代码的灵活性和复用性 本篇文章向大家展现在JDBC和Servlet编程场景下反射和泛型技术的实践 通过灵活使用这两种机制打造 高度可复用的JDBC和Servlet代码 1 JDB
  • Java设计模式:模板方法模式

    作者主页 欢迎来到我的技术博客 个人介绍 大家好 本人热衷于 Java后端开发 欢迎来交流学习哦 如果文章对您有帮助 记得 关注 点赞 收藏 评论 您的支持将是我创作的动力 让我们一起加油进步吧 文章目录 一 模板方法模式的定义 二 模板方
  • 设计模式(3)--对象结构(5)--外观

    1 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口 这个接口使得 这一子系统更加容易使用 2 两种角色 子系统 Subsystem 外观 Facade 3 优点 3 1 对客户屏蔽了子系统组件 减少了客户处
  • 设计模式(三)-结构型模式(4)-组合模式

    一 为何需要组合模式 Composite 在代码设计中 有种情况是对象之间存在层次关系 即对象之间会存在父结点和子结点的关系 比如在文件管理系统中 所有文件和文件夹形成树状结构 文件夹目录里存在子文件夹和文件 文件夹属于枝结点 文件属于叶结
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 自动化测试面试题(附答案)

    1 自动化代码中 用到了哪些设计模式 单例设计模式 工厂模式 PO设计模式 数据驱动模式 面向接口编程设计模式 2 什么是断言 Assert 断言Assert用于在代码中验证实际结果是不是符合预期结果 如果测试用例执行失败会抛出异常并提供断
  • 2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式

    微服务彻底改变了应用程序开发世界 将大型整体系统分解为更小 更易于管理的组件 这种架构风格的特点是独立 松散耦合的服务 带来了从可扩展性 模块化到更高的灵活性等众多优势 DevOps 团队如何最好地利用这种方法来实现最高效率 答案在于理解并

随机推荐

  • java 注解映射数据库字段_浅谈hibernate之映射文件VS映射注解

    前言 对于java开发者而言 注解应该不是一个陌生的概念 早在JavaSE阶段 例如 Override标记重写父类方法或实现接口方法 Test标记单元测试方法 所以我们可以简单地把它理解为一种有特殊含义的标记 在开发过程中 我们还可以用注解
  • 区块链技术学习指引

    本章的文章越来越多 本文是一个索引帖 方便找到自己感兴趣的文章 你也可以使用左侧的分类 标签及搜索功能 有新文章时会更新本文 建议大家加入收藏夹中 如果你觉得本站不错 欢迎你转发给朋友 引言 给迷失在如何学习区块链技术的同学一个指引 区块链
  • MOS管驱动电路——电机干扰与防护处理

    此电路分主电路 完成功能 和保护功能电路 MOS管驱动相关知识 1 跟双极性晶体管相比 一般认为使MOS管导通不需要电流 只要GS电压 Vbe类似 高于一定的值 就可以了 MOS管和晶体管向比较 c b e gt d 漏 g 栅 s 源 2
  • 如何测试云硬盘

    问题 UOS公有云开放以来 一些用户反应用dd命令测试出来的1TB云硬盘的吞吐率 MBPS 只有128MB s 而不是我们SLA保证的170MB s 这是为什么 下面我会简单介绍如何测试硬盘 RAID SAN SSD 云硬盘等 然后再来回答
  • 动态规划:从新手到专家

    http hawstein com 2013 03 26 dp novice to advanced
  • SQL Server 2019 安装教程

    SQL Server 2019 安装教程 下载安装SQL 1 下载SQL Server 2019 Developer 官方网址 下载地址 2 下拉选择免费版本 直接点击下载 别问 问就是家境贫寒 3 双击启动安装文件 示例 4 等待 5 选
  • Web服务器群集:四层代理与七层代理

    目录 一 理论 1 OSI七层模型 2 四层代理 3 七层代理 4 四层代理与七层代理区别 5 负载均衡器 6 常见的代理组件 7 应用场景 二 总结 一 理论 1 OSI七层模型 1 概念 标准的七层网络分层是OSI七层模型 TCP IP
  • Linux下的磁盘管理与磁盘配额

    磁盘管理与配额的建立 磁盘的管理 一 磁盘的表示方式 MBR和GPT MBR 主引导记录 一般为4个主分区 每16个字节描述一个分区 446 磁盘分区的描述 导航 64 磁盘分区 2 磁盘引导的描述 找到后结束引导 MBR作为主引导时会有三
  • PAT 7 程序填空

    两个整数做除法 有时会产生循环小数 其循环部分称为 循环节 比如 11 13 6 gt 0 846153846153 其循环节为 846153 共有6位 下面的方法 可以求出循环节的长度 请仔细阅读代码 并填写划线部分缺少的代码 impor
  • STM32常见错误error: #268: declaration may not appear after executable statement in block

    此错误中文意思 声明不能在可执行语句后出现 表示有变量在函数后面声明 应该改为在函数开头声明变量 因为keil 默认编译标准是C89 解决方法
  • Java项目:网上电商项目(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取 博客首页 资源 里下载 一 项目简述 本系统功能包括 一款基于Springboot Vue的电商项目 前后端分离项目 前台后台都有 前台商品展示购买 购物车分类 订 单查询等等 后台商品管理 订单管理 信息维护 用户管理等等 本期
  • 【第十四届蓝桥杯三月真题刷题训练——第 11 天(3.14)& 卡片 & 路径 & 字符统计 & 费用报销】

    第一题 卡片 问题描述 小蓝有很多数字卡片 每张卡片上都是数字0到9 小蓝准备用这些卡片来拼一些数 他想从1开始拼出正整数 每拼一个 就保存起来 卡片就不能用来拼其它数了 小蓝想知道自己能从1拼到多少 例如 当小蓝有30张卡片 其中0到9各
  • 解决Could not load dynamic library 'libcudart.so.10.0'; dlerror: libcudart.so.10.0: cannot open ...

    安装TensorFlow2 0 GPU版本后 检测是否支持GPU时tf test is gpu available 出现以下信息 2019 11 19 02 52 53 934654 W tensorflow stream executor
  • Maven下载jar是关联源码

    好多用 Maven 的时候会遇到这样一个棘手的问题 就是添加依赖后由于没有下载并关联源码 导致自动提示无法出现正确的方法名 而且不安装反编译器的情况下不能进入方法内部看具体实现 其实 eclipse 的 Maven 插件就提供了这个功能 但
  • pycharm运行不报错,用cmd运行code报错

    1 pycharm运行不报错 用cmd运行code报错 可以参考 Pycharm里面都能运行 为什么在CMD中就不能运行 解决方法 将要执行的模块或者 py文件加入环境变量中 import sys sys path append 需要导入的
  • day08-JS组成和基本结构(补充)/网页引入JS的三种方式/JavaScript核心语法

    0目录 1 JS组成和基本结构 补充 2 网页引入JS三种方式 3 JavaScript核心语法 1 JS组成和基本结构 补充 1 5 JavaScript执行原理 第一步 用户端发送请求到服务器端 第二步 将JS解析出来的数据 用户身份标
  • asp.net core ABP模板本地化设置

    ABP的语言本地化设置非常方便 甚至地区图标ABP框架都已经有了 先看看结果吧 英文的界面 中文的界面 配置流程如下 首先在Localization目录下新建一个对应的json文件 里面存放对应变量的本地化字符串 命名规则就是 应用名 本地
  • ThreadLocal 原理 总结

    1 首先看了 Java并发编程 深入剖析ThreadLocal 这篇文章 这篇文章首先用用一个数据库连接的例子 如多个线程同时进行连接和关闭数据库操作 有可能会导致某个线程刚打开的数据库连接操作 被另一个线程打开的数据库关闭操作给关闭了 然
  • Hyperledger Fabric区块链浏览器搭建

    最近在用Hyperledger Fabric平台做一个项目 要使用区块链浏览器 以下是我的基础环境的情况以及搭建过程 版本 Ubuntu 22 04 1 LTS 运行内存 8 0 GiB 处理器 Intel Core i7 8700 CPU
  • “对象创建”模式——构建器

    动机 在软件系统中 有时候面临着 一个复杂对象 的创建工作 其通常由各个部分的子对象用一定的算法构成 由于需求的变化 这个复杂对象的各个部分经常面临着剧烈的变化 但是将它们组合在一起的算法却相对稳定 如何应对这种变化 如何提供一种 封装机制