Builder(生成器)–对象创建型模式

一、意图
将一个复杂的对象构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

二、动机
1.在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在 一起的算法却相对稳定。
2.如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不 随着需求改变而改变?

三、适用性
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2.当构造过程必须允许被构造的对象有不同的表示时。

四、结构

五、效果
1.它使你可以改变一个产品的内部表示。
2.它将构建代码和表示代码分开。
3.它使你可以对构造过程进行更精细的控制。

六、实现
1.装配和构造接口。
2.为什么产品没有抽象类。
3.在build中缺省的方法为空。

七、要点总结
1.Builder 模式主要用于“分步骤构建一个复杂的对象”。在这其中 “分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。
2.变化点在哪里,封装哪里—— Builder模式主要在于应对“复杂对 象各个部分”的频繁需求变动。其缺点在于难以应对“分步骤构建 算法”的需求变动。
3.在Builder模式中,要注意不同语言中构造器内调用虚函数的差别 (C++ vs. C#) 。

八、举例说明:
造一辆车子,要造轮子,造发动机,造座椅等。然后可以详细的控制轮子、发动机、座椅等的配置。比如轮子的材质选择、发动机的螺丝钉的个数、座椅的高低等。它注重细节。让细节和表现分开。

本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解

Builder(生成器)--对象创建型模式相关推荐

  1. 2018.3.31 设计模式之生成器模式详解及例子(对象创建型模式)

    设计模式之生成器模式(对象创建型模式) 1.定义/概念 将一个复杂对象的创建和它的表示分离,使得同样的创建过程可以有不同的表示. 2.生成模式角色 Builder: 生成器接口,定义创建一个Produ ...

  2. Factory Method(工厂方法)--对象创建型模式

    Factory Method(工厂方法)–对象创建型模式 一.意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 二.动机 1.在软 ...

  3. 设计模式之原型法(ProtoType)----对象创建型模式

    设计模式之原型法(ProtoType)----对象创建型模式 1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用性 1)当要实例化的类是在运行时刻指定时,例如,通过动 ...

  4. java创建型_Java创建型模式

    Java创建型模式 在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象.基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度.创建型模式通过以某种方式控制 ...

  5. 设计模式之六个创建型模式的相关知识,简单易懂。

    一. 简单工厂模式-Simple Factory Pattern 1) 工厂三兄弟之简单工厂模式(一) 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高 ...

  6. 单例模式——创建型模式

    2019独角兽企业重金招聘Python工程师标准>>> 思路: 当我们要写一个工具箱的窗体程序的时候我们会怎么写? //=============================== ...

  7. 设计模式1—创建型模式

    模式          在一定环境中解决某一问题的方案,包括三个基本元素--问题,解决方案和环境.          大白话:在一定环境下,用固定套路解决问题. 设计模式(Design pattern ...

  8. 软件设计与体系结构——创建型模式

    如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔的个人空间 创建型模式: 创建型模式抽象了实例化过程 帮助系统独立于如何创建.组合和表示对象 一个类创建型模式使用继承改变被实例化的类 类创建型 ...

  9. python设计模式-创建型模式

    简单工厂模式 简单工厂模式(Factory Pattern) 提供了一种创建对象的最佳方式.我们希望有一个工厂可以创造不同类型的对象,调用者在创建对象时,只需要指定其名字即可获取一个相应的对象,从而隐 ...

最新文章

  1. 【HTML】记录自己丢人过程:文本换行缩进都不会
  2. Xamarin.iOS项目提示error MSB3174:”TargetFrameworkVersion”的值无效
  3. VC++ 单文档的状态栏编程、CEditView类实现编辑器功能、编辑框显示行号列号
  4. 微信公众号文章质量评分算法详解
  5. Java并发教程–原子性和竞争条件
  6. 动态规划 所有题型的总结
  7. 北妈每日一学:ES6语法入门 之开门见山
  8. Bootstrap 编码规范之编辑工具配置
  9. 关于计算机硬盘属性对话框中,计算机文化基础练习题(2).docx
  10. IDEA 设置文档注释
  11. linux6.5防火墙开端口,Linux(CentOS6.5) 开放端口,配置防火墙
  12. 小程序和网站中无限滚动的实现
  13. [py][mx]django分页第三方模块django-pure-pagination
  14. 洛谷 P4093 [HEOI2016/TJOI2016]序列(Cdq+dp)
  15. 阿里云服务器一年价格
  16. 从码农到艺术家——读《禅与摩托车维修艺术》有感
  17. java显示图片缩略图_java中生成图片的缩略图
  18. 红通告小程序_博主招募新选择,“红通告”助力红人推广
  19. 狂赚310亿美元!安卓系统的钱究竟是怎么来的--转自网友文章160303
  20. 基于opentx开源软件,DIY属于自己的uav遥控器

热门文章

  1. 将一个正方形分成4个大小一样的小正方形,再将其中一个小正方形分成4个小正方形,如此类推,分割n次是几个正方形?
  2. C#趣味程序---水仙花数
  3. 高考地理背熟这些知识可以拿80%的分数(1)
  4. Android之如何解决popupWindow(pw.setFocusable(true))按返回键和menu键退出
  5. [python opencv 计算机视觉零基础到实战] 六、图像运算
  6. 【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”
  7. python组件介绍_python 中的爬虫· scrapy框架 重要的组件的介绍
  8. go 服务器 源码,LollipopGo开源游戏服务器框架--global服务器源码
  9. 表面上在帮女朋友拍照,其实镜头瞄准的是......
  10. 从抛硬币试验看随机游走定义的基本概念错误