文档章节

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

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

背景

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


1、使用意图

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



2、生活实例

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



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

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



4、模式类图

        

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

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

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


5、模式优点

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

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

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

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


6、与类似模式比较

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

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

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

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

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





© 著作权归作者所有

共有 人打赏支持
learn_more
粉丝 92
博文 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
JavaScript设计模式系列二之建造者模式(附案例源码)

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

小钱钱阿圣
2017/09/11
0
0
小菜学设计模式——设计模式总结之结构型

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

learn_more
2015/07/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
2
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
6
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
8
0
GPON网络故障处理手册

导读 为了方便广大网络工作者工作需要,特搜集以下GPON网络处理流程供大家学习参考。开始—初步定为故障—检查光纤状况—检查ONU状态--检查设备运行状态—检查设备数据配置—检查上层设备状态...

问题终结者
昨天
7
0
MariaDB、Apache安装

11月12日任务 11.6 MariaDB安装 11.7/11.8/11.9 Apache安装 1.MariaDB安装 cd /usr/local/src wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/......

hhpuppy
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部