http://www.cnblogs.com/happyhippy/archive/2010/09/01/1814287.html

使用builder模式的时候:

本篇文章的原因:builder模式接口非常固定,不允许改变。

当有新产品创建任务的时候。首先是想着通过参数来控制产品的变化,这样可以直接复用现有的实现。如果现有的实现无法满足需求,就需要重新实现一个concreatebuilder来满足新的需求。但是需求又是不可预见的,如何防止系统能够应对不断变化的客户需求呢?

面向业务的复杂产品一开始就知道需求基本上是不可能,特别是对于客户级别的产品来说。因此builder模式只适合建造一些与业务相关性不大的产品。例如StringBuilder,SQLInsertBuilder,AlertDialogBuilder。这些builder的共同点是,在整个系统中的功能基本上都是定死的,不需要改变的。改变的只有组装过程和组成部分。像StringBuilder,不同的组装过程可能会产生不同的结果,而AlertDialogBuilder是不同的组成部分产生的不同结果。

2.但是,如果说,非要使用客户级别的builder模式。那么下面的建议将是比较有用的:

2.1.不到万不得已不要建立builder的子类。

2.2.使用装饰者模式防止builder子类的膨胀。

2.3.参数化builder模式,保证builder的可扩展性。

2.4.用抽象工厂模式来配置系统。

可扩展性的builder模式的构建方法相关推荐

  1. 设计模式系列-Builder模式(高效构建参数)

    引言 在Java编程中,常常需要为一个Bean构建成员变量或者构建参数,常用的方法有使用构造函数.使用JavaBean的set()方法,但是这两个方案或多或少都存在一定的缺点,于是今天的主角build ...

  2. 设计模式-Builder模式(构建者模式)

    目录 构建者模式是什么? 为什么要用构建者模式? 构建者模式是什么? 简单来说,就是用于组装具有复杂结构的实例的模式. 什么意思呢?先来看个例子,比如现在有一个类TextBuilder用来创建一个文本 ...

  3. Idea 类builder模式插件安装方法

    builder 模式的代码 手写的话不是不可能,字段多了 就恶心了,下面就会看到,长话短说,IEDA 安装 builder 插件 首先Idea  快捷键Ctrl +alt+s  打开preferenc ...

  4. 11. 对象创建模式之 Builder模式(构建器)(不常用)

    1. 动机 在软件系统中,有时候面临着"一个"复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化, ...

  5. builder模式构建JavaBean

    这几天在看顾浩鑫的<Android高级进阶>,觉得这本书写得挺不错的,作为进阶一类,设计的知识面很多.在看的时候有一个知识点讲得很好,是关于Builder模式的,之前在学习设计模式的时候通 ...

  6. 设计模式之构建者(Builder)模式

    在五大设计原则的基础上经过GOF(四人组)的总结,得出了23种经典设计模式,其中分为三大类:创建型(5种).结构型(7种).行为型(11种).今天对创建型中的构建者(Builder)模式的思想进行了一 ...

  7. 设计模式初探-Builder模式

    Builder模式,又称生成器或构建者模式,属于对象创建型模式,侧重于一步一步的构建复杂对象,只有在构建完成后才会返回生成的对象.Builder模式将一个复杂对象的构建与它的表示分离,使得同样的构建过 ...

  8. 设计模式----创建型设计模式(单例模式、工厂方法模式、构建者模式)

    创建型设计模式 单例模式(Singleton Pattern) 单例模式介绍 代码演示 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安全,同步方法) 懒汉式(线程安全, ...

  9. 火遍全网的Hutool,如何使用Builder模式构建线程池

    前言 Builder 设计模式也叫做 构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行 Builder 设计模式在作者编码过程中,属于比较常用的模式之一.优秀的设计模 ...

最新文章

  1. ajax调用上一个ajax,关于jquery:当频繁使用ajax请求调用函数时,如何在处理下一个请求之前等待上一个ajax请求完成?...
  2. Object.create()和new Object()
  3. Linux权限和进程管理、网络配置、任务调度(四)
  4. math python 向上取整_Python的数值基本运算和其它数学运算方法
  5. python课设答辩问题及答案_HTML5网站前端开发设计答辩问题及答案
  6. 一般试卷的纸张大小是多少_档案产品库纸张整理专家
  7. python测试rabbitmq简易实例
  8. pod install 在1.0.0.beta.1 cocoapods版本显示错误
  9. wps下一步快捷键_WPS快捷键大全(最常用138个办公快捷键)
  10. python计算隐含波动率_用Python快速计算隐含波动率
  11. error C2143: 语法错误 : 缺少“;”(在“template”的前面)
  12. 工厂模式以及应用简单解释
  13. 前端效果之“拉开窗帘”
  14. python数据类型的转换
  15. MAC下解压(.xip)文件
  16. Directx11教程(49) stencil的应用-镜面反射
  17. 网络营销实战课-好用的工具推荐
  18. 数字可视化大屏边框制作
  19. java实现将数据生成图表至excel导出
  20. RTSP H264播放器(基于live555、ffmpeg、d3d应用)

热门文章

  1. c语言程序设计 赵宏,C语言程序设计(模块化程序设计I )(6页)-原创力文档...
  2. PDF文件修改后,保存时出现:文档无法保存。读取文档时出现问题(135)
  3. vb 实现二维数组(矩阵)转置。_笃学不倦|数组的定义
  4. rz sz命令_5分钟学linux命令之split
  5. 设置串行端口的通信参数
  6. CocoaPods公有库的创建
  7. TP 框架没有考虑完善的功能点:1、表达式查询不支持INSTR形式的查询
  8. mysql 插入汉字 异常 Incorrect string value: '\xE8\xA7\x84\xE5\x88\x99' for column 'name'
  9. android 设颜色透明值
  10. 打造属于自己的图文符号库