建造者模式(Builder Pattern)
建造者模式(Builder Pattern)
它可以将多个简单的对象一步一步构建成一个复杂的对象。
意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 何时使用:一些基本部件不会变,而其组合经常变化的时候。 如何解决:将变与不变分离开。 关键代码:建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。 应用实例: JAVA 中的 StringBuilder等。 优点: 1、建造者独立,易扩展。 2、便于控制细节风险。 缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。 使用场景: 1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。 注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。
在我们实际编程开发过程中需要调用许多前人已经写好的类或接口来完善我们某些特殊的需求,这就好比我们去餐馆里吃饭(开发),点了一桌合家欢套餐(需求),桌上的饭菜里面必定有肉食,蔬菜类,主食,汤类等等(pojo,JavaBean,entity等),我们不关心饭菜是怎样制作的(底层代码的具体实现逻辑和 数据),我们只管吃喝玩乐(调用和吐槽)。大多数人并没有耐心和精力去确定每一个菜品的选择,套餐无疑是一个简单方便效率高的选择,这时候如果餐馆经理(director)告诉我们有“奢华套餐”和“普通套餐”或其他什么套餐(封装成类或接口)等多种选择,我们会根据自身条件和需求自主选择要哪个套餐。这个过程中,餐馆经理(director)已经将各个菜品封装好,然后端上桌子供我们享受,无论奢华套餐还是普通套餐都还有肉食,蔬菜类,主食,汤类等要素。
这无形中提高了餐馆的营业效率和压缩顾客的点餐时间成本,餐馆内部分工方面,厨师还是做原来的菜(基础类工厂),新产生的职位拼菜工(director内部方法)将菜品封装(调用封装类)。如果餐馆需要一位能做不同口味的厨师,能做更多的菜,产生更多的套餐,那我们只需向餐馆经理(director)提意见就好了.
最后,我自己也蒙圈了,这个比喻有些许不恰当的地方,初出茅庐,还请大神指正。以上只是我自己的理解。总之建造者模式的精髓还是告诫人们不要重复造轮子,让大家享受更便捷的开发环境。
参考资料:http://www.runoob.com/design-pattern/builder-pattern.html
https://blog.csdn.net/u010102390/article/details/80179754
建造者模式(Builder Pattern)的更多相关文章
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 【设计模式】建造者模式 Builder Pattern
前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...
- 二十四种设计模式:建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...
- iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...
- 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- Net设计模式实例之建造者模式(Builder Pattern)
一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...
- Python 设计模式之建造者模式 Builder Pattern
#引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...
- 设计模式 - 建造者模式 Builder Pattern
简介 场景 在创建复杂对象时,用户无须关心该对象所包含的属性以及它们的组装方式,只需要指定复杂对象的类型和内容就可以构建它们. 模式定义 建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程 ...
随机推荐
- 第四周java学习总结
学号 20175206 <Java程序设计>第四周学习总结 教材学习内容总结 第五章主要讲的是主类与继承 本章主要介绍了:封装.继承.多态的关系:抽象类与接口的区别:各种关键字的类与方法: ...
- Hadoop大数据通用处理平台
1.简介 Hadoop是一款开源的大数据通用处理平台,其提供了分布式存储和分布式离线计算,适合大规模数据.流式数据(写一次,读多次),不适合低延时的访问.大量的小文件以及频繁修改的文件. *Hadoo ...
- 基于jeesite的cms系统(四):使用Beetl模版引擎在后端渲染数据
一.Beetl简介 1. 什么是Beetl Beetl目前版本是2.9.3,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点.使得开发和维护模板有很好的体验. ...
- 一个Ajax读数据并使用IScroll显示辅助类
花了2天时间对iscroll进行了一些封装,方便进行ajax读取数据和显示 1.IScroll直接使用的话还是挺麻烦的,特别是牵涉到分页加载动态加载数据时,以下是核心实现代码. 2.Loading提示 ...
- 课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现
课程设计个人报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.个人贡献 参与课设题目讨论及部分过程 资料收集 负责代码调试 捕鱼游戏相应功能的实现 实验环境 Eclipse软件开发环境: ARM实验 ...
- 请求数据loading
请求数据加载,CSS3实现 HTML: <!--请求数据loading--> <div class="back_loading"> <div clas ...
- 2018-2019-2 20165337《网络对抗技术》Exp2 后门原理与实践
基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 下载破解游戏,盗版电影或安装来历不明的软件,可能被留下后门. (2)例举你知道的后门如何启动起来(win及linux)的方式? w ...
- 2018-2019-1 20165231 实现mypwd(选做)
实现mypwd 要求: 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd pwd: 在Linux层次结构中,想要知道当前所处的目录, ...
- java activemq初体验
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...
- Visual Studio 2013 SDK 扩展之简介
Release Notes:[发行说明]启动记事本的扩展,以管理员身份运行验证通过. Getting Started Guide:[入门]使用[Ctrl + 1]更快捷打开记事本 More Info ...