说明:由于本人是一个初学者,所以博客中用到的一些见解、图片、代码或者说明可能引用网络上面的资源,如果涉及到了侵权的问题请大家联系我进行删除。

Builder(构造器)模式也是对象创建模式中的一个,也是不是很常用的一个模式。


动机

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

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


模式定义

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


举例

用建造者(Builder)模式描述客厅装修。

分析:客厅装修是一个复杂的过程,它包含墙体的装修、电视机的选择、沙发的购买与布局等。客户把装修要求告诉项目经理,项目经理指挥装修工人一步步装修,最后完成整个客厅的装修与布局,所以本实例用建造者模式实现比较适合。

这里客厅是产品,包括墙、电视和沙发等组成部分。具体装修工人是具体建造者,他们负责装修与墙、电视和沙发的布局。项目经理是指挥者,他负责指挥装修工人进行装修。

本例的结构图如下:

从图片中我们不难看出上面的四个类都是相对稳定的部分,下面的两个具体实现类都是变化的部分。


要点总结

Builder模式主要用于”分步骤构建一个复杂的对象“。在这其中”分步骤“是一个稳定的算法,而复杂对象的各个部分则经常变化。

变化点在哪里封装哪里——Builder模式主要在于应对”复杂对象各个部分“的频繁需求变动。其缺点在于难以应对”分步骤构建算法“的需求变动。

在Builder模式中,要注意不同语言中构造器内调用虚函数的差别(C++,Java,C#)。

设计模式学习(九):Builder相关推荐

  1. 设计模式学习笔记清单

    设计模式学习笔记清单 关于设计模式许多人已经耳熟能详,这段时间结合李建忠的教学视频以及大量网络资料,把这部分过了一遍,整理出学习笔记,而真正的深入学习和理解只能在具体的开发环境中日积月累.      ...

  2. 设计模式学习(十一):Builder建造者模式

    一.什么是Builder模式 大都市中林立着许多高楼大厦,这些高楼大厦都是具有建筑结构的大型建筑.通常,建造和构建这种具有建筑结构的大型物体在英文中称为Build. 在建造大楼时,需要先打牢地基,搭建 ...

  3. Builder (建造者) — 【面向对象设计模式学习】

    Builder (建造者) - [面向对象设计模式学习] By CityWalker 2010年3月19日 Intent Separate the construction of a complex ...

  4. 设计模式学习笔记——建造者(Builder)模式

    设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...

  5. 九大常用设计模式学习-装饰者模式

    设计模式学习记录:一句话+代码体会设计模式. 九大常用设计模式 单例模式:https://blog.csdn.net/qq_37902949/article/details/87903569 简单工厂 ...

  6. 设计模式学习(四):基于Builder模式的歌词解析器

    一.前言 上篇文章(设计模式学习(三):生成器(Builder)模式)记录了 Builder 模式的具体内容,这次使用C语言来实现一个实际的例子--基于Builder模式的歌词解析器. 本文的示例来自 ...

  7. 设计模式学习笔记(C++实现)(九)--组合模式

    1.组合模式简介 英文名称 Composite 主要目的 该模式将对象组合成树形结构已表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 使用场景 1.当 ...

  8. 步步为营 .NET 设计模式学习笔记系列总结

    设计模式我从开篇到23种设计模式的讲解总共花了进两个月的时间,其间有很多读者给我提出了很好的建议,同时也指出了我的不足,对此我表示感谢,正是由于很多读者的支持我才能坚持的写到最后.在此表示我真诚的谢意 ...

  9. 设计模式学习笔记——装饰(Decorator)模式

    设计模式学习笔记--装饰(Decorator)模式 @(设计模式)[设计模式, 装饰模式, decorator] 设计模式学习笔记装饰Decorator模式 基本介绍 装饰案例 类图 实现代码 Dis ...

  10. 设计模式学习笔记——抽象工厂(Abstract Factory)模式

    设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...

最新文章

  1. robo3t 连接服务器数据库_车牌识别软件连接各种数据库方法大全
  2. Blender中的Python脚本介绍学习教程
  3. Hbase完全分布式的搭建
  4. oracle 查重复_日常答疑|MySQL删除重复数据踩过得坑
  5. python绘制柱形图-Python openpyxl Excel绘制柱形图
  6. mysql 数据库优化之执行计划(explain)简析
  7. 数据为桥迈向智能,渤海财险数据架构智能化演进
  8. python中metaclass的理解
  9. C# WinForm 文件上传下载
  10. python访问字符串中的部分字符的操作_python中字符串的常见操作方法
  11. 为什么root下不能使用passwd命令_Linux:CentOS 7中常用的基础命令
  12. PhpStorm 配置 Git 教程
  13. Windows系统以及office等一键激活
  14. 2021牛客多校10F Train Wreck (贪心,思维题)
  15. html display none取消,将displaynone取消
  16. set的用法及短语_set的用法和短语例句
  17. 找不到www.jetbrains.com的服务器IP地址
  18. 每日安全文章【1122】
  19. 视频怎么水平翻转画面并做锐化处理?
  20. 断言(assertion)的简介

热门文章

  1. 养QQ宠物不花Q币?完全可以!(转)
  2. iphone UINavigationController使用的一些技巧
  3. 菲尔兹奖得主埃菲 · 杰曼诺夫全职加入南科大,任职讲席教授
  4. 江苏省南通中学2021高考成绩查询,南通中学排名前十名,2021年南通中学排名一览表...
  5. openwrt修改生成BIN文件大小以用于8M FLASH(WR703N)
  6. Java实现零钱通功能
  7. Java如何创建项目
  8. C# 用QQ企业邮箱发邮件
  9. NCR(numeric character reference)字符转换成真实字符
  10. 实验 详解K8S多节点部署群集