可扩展性的builder模式的构建方法
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模式的构建方法相关推荐
- 设计模式系列-Builder模式(高效构建参数)
引言 在Java编程中,常常需要为一个Bean构建成员变量或者构建参数,常用的方法有使用构造函数.使用JavaBean的set()方法,但是这两个方案或多或少都存在一定的缺点,于是今天的主角build ...
- 设计模式-Builder模式(构建者模式)
目录 构建者模式是什么? 为什么要用构建者模式? 构建者模式是什么? 简单来说,就是用于组装具有复杂结构的实例的模式. 什么意思呢?先来看个例子,比如现在有一个类TextBuilder用来创建一个文本 ...
- Idea 类builder模式插件安装方法
builder 模式的代码 手写的话不是不可能,字段多了 就恶心了,下面就会看到,长话短说,IEDA 安装 builder 插件 首先Idea 快捷键Ctrl +alt+s 打开preferenc ...
- 11. 对象创建模式之 Builder模式(构建器)(不常用)
1. 动机 在软件系统中,有时候面临着"一个"复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化, ...
- builder模式构建JavaBean
这几天在看顾浩鑫的<Android高级进阶>,觉得这本书写得挺不错的,作为进阶一类,设计的知识面很多.在看的时候有一个知识点讲得很好,是关于Builder模式的,之前在学习设计模式的时候通 ...
- 设计模式之构建者(Builder)模式
在五大设计原则的基础上经过GOF(四人组)的总结,得出了23种经典设计模式,其中分为三大类:创建型(5种).结构型(7种).行为型(11种).今天对创建型中的构建者(Builder)模式的思想进行了一 ...
- 设计模式初探-Builder模式
Builder模式,又称生成器或构建者模式,属于对象创建型模式,侧重于一步一步的构建复杂对象,只有在构建完成后才会返回生成的对象.Builder模式将一个复杂对象的构建与它的表示分离,使得同样的构建过 ...
- 设计模式----创建型设计模式(单例模式、工厂方法模式、构建者模式)
创建型设计模式 单例模式(Singleton Pattern) 单例模式介绍 代码演示 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安全,同步方法) 懒汉式(线程安全, ...
- 火遍全网的Hutool,如何使用Builder模式构建线程池
前言 Builder 设计模式也叫做 构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行 Builder 设计模式在作者编码过程中,属于比较常用的模式之一.优秀的设计模 ...
最新文章
- ajax调用上一个ajax,关于jquery:当频繁使用ajax请求调用函数时,如何在处理下一个请求之前等待上一个ajax请求完成?...
- Object.create()和new Object()
- Linux权限和进程管理、网络配置、任务调度(四)
- math python 向上取整_Python的数值基本运算和其它数学运算方法
- python课设答辩问题及答案_HTML5网站前端开发设计答辩问题及答案
- 一般试卷的纸张大小是多少_档案产品库纸张整理专家
- python测试rabbitmq简易实例
- pod install 在1.0.0.beta.1 cocoapods版本显示错误
- wps下一步快捷键_WPS快捷键大全(最常用138个办公快捷键)
- python计算隐含波动率_用Python快速计算隐含波动率
- error C2143: 语法错误 : 缺少“;”(在“template”的前面)
- 工厂模式以及应用简单解释
- 前端效果之“拉开窗帘”
- python数据类型的转换
- MAC下解压(.xip)文件
- Directx11教程(49) stencil的应用-镜面反射
- 网络营销实战课-好用的工具推荐
- 数字可视化大屏边框制作
- java实现将数据生成图表至excel导出
- RTSP H264播放器(基于live555、ffmpeg、d3d应用)
热门文章
- c语言程序设计 赵宏,C语言程序设计(模块化程序设计I )(6页)-原创力文档...
- PDF文件修改后,保存时出现:文档无法保存。读取文档时出现问题(135)
- vb 实现二维数组(矩阵)转置。_笃学不倦|数组的定义
- rz sz命令_5分钟学linux命令之split
- 设置串行端口的通信参数
- CocoaPods公有库的创建
- TP 框架没有考虑完善的功能点:1、表达式查询不支持INSTR形式的查询
- mysql 插入汉字 异常 Incorrect string value: '\xE8\xA7\x84\xE5\x88\x99' for column 'name'
- android 设颜色透明值
- 打造属于自己的图文符号库