文档章节

小菜学设计模式——建造者模式

learn_more
 learn_more
发布于 2015/06/11 21:16
字数 923
阅读 144
收藏 7
点赞 0
评论 0

背景

    不要小看炒菜这件小事上,想要上一道佳肴,那是需要循规蹈矩,步步小心的。我相信你肯定在外面吃过没放盐的快餐,吃过放多了盐的快餐.....既然炒菜是一个如此复杂的过程,又必须循规蹈矩,那为什么不给他一个死规定呢?如果谁没有按照规定做事,就进行对应的提醒警告。这就是建造者模式的由来,限制规则步骤,但是开发规则细节。比如说盛菜之前必须放盐,那么规定一定要放盐,具体放多少自己论情况而定。


1、使用意图

    如果你需要将一个复杂对象的构建与它的表示(构建具体过)分离,使得同样的构建过程可以创建不同的表示的意图时,建造者模式就出现了,这个模式又称为生成器模式,从名字就可以知道,他的目的是为了构建(生成)一个对象,一个创建大体过程相同,但是具体细节不同的对象。



2、生活实例

    复杂的炒菜过程忘记了放盐



3、Java 例子(框架、JDK 、JEE)

    没有很注意,如果哪位同学觉得哪里用上了,可以补充



4、模式类图

        

1)Director:指挥者,他来定义这个复杂对象的创建流程

2)Builder:抽象构建角色,他是定义每一个规矩细节,也就是声明构建这个对象需要哪些必要的规矩方法

3)ConcreteBuilder:具体构建者,他实现了Builder的每一个规矩,因为方法实现的多样化从而造就了各种不同的对象


5、模式优点

    建造模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;

    这些复杂对象的内部构建的顺序通常是稳定的,步骤的多少也是确定的,如果是那些不稳定经常发生变化的复杂对象,那么这个设计模式将会是一个未被开放封闭原则的错误!

    建造者模式的好处是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要顶一个一个具体的建造者。

    建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式。


6、与类似模式比较

    建造者模式可以将一个产品的内部表象与产品生成过分割开来,从而可以使一个建造过程生成具有不同内部表象的产品对象。

    采用建造者模式感觉很大的优点就是:

    1)接口已经声明,没有实现的具体构建者都不能通过编译,那么步骤不会缺失(空实现也算实现)

    2)不同对象的创建容易扩展,因为建造与表示分离,所以,可以很好的扩展不同的对象。

相比其他设计模式,这个模式其实有模板方法模式有点相似,都是一个固定的过程中,实现不同的细节;





© 著作权归作者所有

共有 人打赏支持
learn_more
粉丝 91
博文 240
码字总数 210196
作品 0
深圳
程序员
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
0
0
小菜学设计模式——设计模式总结之创建型

1、面向过程与面向对象 1)面向过程通过划分功能模块,通过函数间相互调用来实现,但需求变化时就需要更改函数,而你改动的函数有多少地方在调用她呢?关联多少数据,这是很不容易弄得清楚地...

learn_more
2015/07/05
0
0
设计模式8——Builder设计模式

Builder建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就...

小米米儿小
2013/12/11
0
0
从ES6重新认识JavaScript设计模式(三): 建造者模式

1 什么是建造者模式? 建造者模式(Builder)是将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。 建造者模式的特点是分步构建一个复杂的对象,可以用不同组合或顺序...

Lee_tanghui
06/02
0
0
23种设计模式(4):建造者模式

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 类型:创建类模式 类图: 四个要素 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂...

LCZ777
2014/07/05
0
0
设计模式笔记(三)——建造者模式

需求矛盾 l 同一个厨师,可能每次炒的菜味道不一样! l 但全国各地的肯德基,味道都几乎一个味??? 思考: 1) 为什么我每次吃到的菜,味道都不一样?到底菜被什么控制了? 2) 为什么肯德基...

LinkedBear
03/28
0
0
小菜学设计模式——设计模式总结之结构型

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more
2015/07/06
0
0
JavaScript设计模式系列二之建造者模式(附案例源码)

文章初衷 设计模式其实旨在解决语言本身存在的缺陷, 目前javaScript一些新的语法特性已经集成了一些设计模式的实现, 大家在写代码的时候,没必要为了用设计模式而去用设计模式, 那么我这边为什...

小钱钱阿圣
2017/09/11
0
0
设计模式(Swift) - 3.观察者模式、建造者模式

上一篇 设计模式(Swift) - 2.单例模式、备忘录模式和策略模式中讲了三种常见的设计模式. 单例模式: 限制了类的实例化,一个类只能实例化一个对象,所有对单例对象的引用都是指向了同一个对象....

Dariel
07/01
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python以太坊类库web3.py概览

python通过web3.py库与以太坊交互共同入口是web3对象。web3对象提供API接口,python开发应用与以太坊进行交互如钱包创建、支付、转账等连接JSON-RPC服务器进行。 Providers提供者 Providers使...

智能合约
刚刚
0
0
【Android学习笔记】设置App启动页

先将启动页放到项目资源中,图片一般是1080*1920的jpg。 新建一个activity,如图: 创建成功之后,打开刚刚创建的activity,来进行代码的编写: >>>阅读全文

全部原谅
2分钟前
0
0
什么是React-redux、为什么使用React-redux、怎么使用React-redux

1、什么是React-redux React-redux是用于连接React和Redux的 2、为什么使用React-redux 使用React-redux可以使redux部分代码更简洁更明了,比如组建中需要使用到的数据都在mapStateToProps方...

kimyeongnam
4分钟前
0
0
Spring核心——Stereotype组件与Bean扫描

在注解自动装载中介绍了通过注解(Annotation)自动向Bean中注入其他Bean的方法,本篇将介绍通过注解(Annotation)向容器添加Bean的方法。 Spring的核心容器提供了@Component和@Bean注解来标...

随风溜达的向日葵
4分钟前
0
0
利用世界杯,读懂 Python 装饰器

Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic。 今天就结合最近的世界杯带大家理解下装饰器。...

猫咪编程
8分钟前
0
0
flink fold example

flink fold例子 import org.apache.flink.api.common.functions.*;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api.environment.S......

coord
9分钟前
0
0
c++ qt 组播总结

每个人都有不同的认知规律和习惯, 有的人喜欢搞一套严密的大理论, 论述起来滔滔不绝, 不管自己懂不懂, 反正读者/听者是没搞懂。 有的人喜欢从实践出发, 没看到代码, 不运行一下, 不看...

backtrackx
13分钟前
0
0
Sublime text2安装json格式化插件SublimePrettyJson[Windows]

一、下载SublimePrettyJson插件包 https://github.com/dzhibas/SublimePrettyJson 二、将下载的文件解压放到在package目录下面 C:\Users\lucky\AppData\Roaming\Sublime Text 3\Packages 每个......

lazy~
13分钟前
0
0
安装vue-cli 报4058错误

1. 4058是网络代理错误。 安装淘宝源修改一下就可以了: npm --registry https://registry.npm.taobao.org info underscore 改为cnpm执行: cnpm install --global vue-cli 安装成功: 试试版...

MrBoyce
15分钟前
0
0
CPU飙升分析

1、top -----看具体的进程 2、top -H -p pid ------该进程的线程 3、printf 0x%x 15248 ------将线程改为16进制 4、jstack 进程...

北极之北
17分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部