建造者模式可以将复杂的构建与其表示相分离,是的相同的构建过程可以创建出不同的表示。

    建造者模式与抽象工厂的差别是:在建造者模式里,有个指导者,这个指导者来管理建造者。用户与指导者相互联系,指导者联系建造者,终于得到我们须要的产品。即建造者模式能够强制实行一种分步骤进行的建造过程。

    建造者模式是将复杂的的内部创建封装在内部。对于外部调用的人员来说,仅仅要传入指导者和建造者就能够了,详细内部如何建造成为产品,用户不用知道,不同的产品须要定义不同的建造者。
概念:
    1.抽象建造者(builder):此类一般为抽象类或者是接口。它负责描写叙述产品的建造过程(一步或者若干部)。同一时候提供返回终于产品的方法,比如这个类叫CarBuilder(void makeHead(建造车头的接口),void makeBody(建造车身的接口),void makeFoot(建造车尾的接口), Car getCar(返回一辆车)),当中三个void方法。是这辆车的组装顺序,getCar是返回终于的产品。
    2.详细建造者(ImplBuilder or extendsBuilder):此类为实现或者继承了第一步所写的接口或者抽象类,能够存在有多个,比方JeepBuilder(吉普车的建造),AodiBuilder(奥迪车的建造),实现getCar()的时候。返回产品的实例一样,实例属性不同
    3.产品实例(Car):指被构建的对象。对象内有多个属性,或者多条构建步骤
    4.指挥者(Director):指挥者又称为导演者,他负责安排对复杂对象的建造过程,指挥者与抽象建造者之间存在关联关系,指挥者中的方法(createCar())调用抽象建造者的实现类的建造步骤,完毕对复杂对象的建造功能。client一般仅仅须要实例化一个指挥者,然后实例化一个建造者(jeep车的详细建造或者aodi车的详细建造),然后通过指挥者的构造函数或者setter方法传入建造者。在指挥者的指挥类中调用建造过程。
建造模式的长处:
    1.封装性
        使用建造者模式时,能够使client不必知道产品的内部组成的细节,如上面的样例,最后都返回car对象,传入不同的建造者,就返回不        同的car对象,client不用知道内部的装配步骤
    2.建造者独立。easy扩展
        易扩展体如今不同的建造者的构建,仅仅要建造者的调用的步骤方法一样。就能够通过继承抽象类或者实现接口。来返回不同的建造者,有利于系统的扩展
    3.便于控制细节风险
        由于详细的建造者是独立的,因此能够对建造对象进行定制diy或者细化等等操作。而不用操心会对其它模块产生不论什么影响
建造者模式的使用场景:
    1.同样的方法,不同的运行顺序。产生不同的事件结果时,能够採用建造者模式
    2.多个步骤或者零件。都能够装配到一个对象中。但产生的对象内容是不一样的这时候就能够使用此模式
    3.产品类比較复杂,或者调用不同的顺序会产生不同的结构的时候。能够使用建造者模式
    4.在对象的创建过程中会用到系统中的其它对象,这些对象在产品对象的创建project中是不easy得到的,也能够使用此模式风窗该对象的创建过程。不推荐此种方法,此方法仅仅是一种补偿方法,由于一个对象不easy得到,在设计的时候已经违背了最初的设目标
建造者模式关注的零件类型和装配的顺序。这是他与工厂模式最大不同的地方。尽管同为创建类模式,可是重点确是不同的。


java设计模式之-建造者模式的更多相关文章

  1. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  2. Java 设计模式之建造者模式(四)

    原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...

  3. java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  4. Java设计模式之建造者模式(Builder)

    前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ...

  5. Java设计模式之三 ----- 建造者模式和原型模式

    前言 在上一篇中我们学习了工厂模式,介绍了简单工厂模式.工厂方法和抽象工厂模式.本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式. 建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用 ...

  6. Java设计模式之三建造者模式和原型模式

    建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.简单的来说就是将一个复杂的东西 ...

  7. java设计模式之建造者模式

    学习了设计模式,一直感觉有进步又没有进步,与同学.同事探讨了一下.变化不可能一会就可以的,需要努力坚持.不管进步大小,也不管是否进步,做到勿忘初心,做自己喜欢的事情就好.还有几个设计模式一直没有写,原 ...

  8. java设计模式之四建造者模式(Builder)

    工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到 ...

  9. java设计模式3.建造者模式、原型模式

    建造者模式 一个产品常有不同的组成部分作为产品的零件,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用,有些时候,一个对象的一些性质必须按照某个顺序赋值才 ...

  10. JAVA设计模式总结—建造者模式

    建造者模式 模式动机与定义 ​ 首先建造者模式的动机是为了创建复杂对象,简化传统的创建方法,提高创建的效率和可读性. ​ 像图中的这个例子,用户的需求是驾驶一辆汽车,但是对于用户来说是不需要了解汽车装 ...

随机推荐

  1. 用asp.net+Jquery+Ajax+sqlserver编写的 (英语六级记单词)

    开始(英语对程序员的重要性引用) 出处 英语的重要性已经毋庸置疑,对于程序员来说更甚,一些最新的技术资料是英文的,如果想进入外企英语也是一个很重要的条件.对于程序员来说怎样学习好英语,在此谈一下我的一 ...

  2. 微信小程序的那些坑

    早闻微信小程序是个坑,结果名不虚传,细数一下我开发小程序遇过到坑. 1.UI组件过度封装. 微信小程序的组件是模仿react.js或vue.js的web组件设计的,并且封装了weui.css样式. P ...

  3. 解决前端工程师与UI设计协同工作的问题

    前端工程师与UI设计协同工作主要环节在于设计图与前端界面是否一致.(还原度) 不得不说,设计图与前端界面实现不一致的问题时有发生.(好吧,我经验有限)所以经常写完的前端页面都需要去修改.(特别是做移动 ...

  4. Diango路由控制

    路由的格式: #路由配置的格式: urls.py里面写 from diango.conf.urls import url urlpatterns = [ url(正则表达式,views视图函数,nam ...

  5. C#委托实现异步

    BeginInvoke  开始调用 EndInvoke  结束调用 文章:C#编程总结(六)异步编程 文章:C#多线程实现方法——异步委托/调用 文章:你可能不知道的陷阱:C#委托和事件的困惑 一些委 ...

  6. Python日志记录(Logging)

    日志记录跟程序的测试相关,并且在大幅度更改程序内核时很有用,它可以帮助我们找到问题和错误的所在.日志记录基本上就是收集与程序运行有关的数据,这样可以在随后进行检查或者累计数据. 1.简单示例 在Pyt ...

  7. IE7下z-index失效问题

    看代码: HTML <div class="select-wrap"> <div class="select-name">院系</ ...

  8. HDU——4291A Short problem(矩阵快速幂+循环节)

    A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. BZOJ-1221 软件开发

    这题是基于一道经典的费用流模型. 将每天拆成两个点i和j,新增源和汇并建立六种边: 1.从源出发到每个i点,flow为+∞,cost为每条新餐巾的价值,表示这一天所使用的餐巾中来自购买的餐巾 2.从源 ...

  10. flex宽度总结

    flex宽度相关的属性有三个 flex-grow,flex-shrink,flex-basis.下面分别介绍其相关特点: flex-grow 扩大因子,主轴有剩余空间时,元素分配到剩余空间的比率 fl ...