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

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

    建造者模式是将复杂的的内部创建封装在内部。对于外部调用的人员来说,仅仅要传入指导者和建造者就能够了,详细内部如何建造成为产品,用户不用知道,不同的产品须要定义不同的建造者。
概念:
    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. T-SQL中的indexof函数

    在C#字符串中查找字符有indexof方法,那么在T-SQL与之相对应的是CHARINDEX方法,其语法为CHARINDEX(要查找的字符,字符串),返回一个数字. CHARINDEX(',','aa ...

  2. 皮尔逊相关系数的计算(python代码版)

    from math import sqrt def multipl(a,b): sumofab=0.0 for i in range(len(a)): temp=a[i]*b[i] sumofab+= ...

  3. HDU——1013Digital Roots(九余数定理)

    Digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  4. HDU-1528/1962 Card Game Cheater

    两组牌中两张牌相比能赢的就连,后求最大匹配. #include <cmath> #include <cstdlib> #include <cstdio> #incl ...

  5. 正则表达式的\b与\B总结

    \b 单词边界,是指单词与符号之间的边界,是一个位置,不是空格或字符.(这里单词可以是中文字符,英文字符,数字:  符号可以是中文符号,英文符号,空格,制表符,换行).不能与量词?+*{1}{2,5} ...

  6. [POJ2417]Discrete Logging(指数级同余方程)

    Discrete Logging Given a prime P, 2 <= P < 2 31, an integer B, 2 <= B < P, and an intege ...

  7. 小程序语音红包开发中 汉字转拼音的问题 微信小程序红包开发遇到的坑

    公司最近在开发微信小程序的红包功能,语音红包需要用到文字转拼音的功能. 之前介绍过怎么将中文的汉字转为拼音的,具体看下面这篇文章. 微信语音红包小程序开发如何提高精准度 红包小程序语音识别精准度 微信 ...

  8. scrapy之小试身手

    要爬取的网址是:http://quotes.toscrape.com/ 磕磕绊绊的写完了 spiders import scrapy from kkk.items import * class Quo ...

  9. hdu 3625 Examining the Rooms 轮换斯特林数

    题目大意 n个房间对应n把钥匙 每个房间的钥匙随机放在某个房间内,概率相同. 有K次炸门的机会,求能进入所有房间的概率 一号门不给你炸 分析 我们设\(key_i\)为第i间房里的钥匙是哪把 视作房间 ...

  10. [LeetCode] Edit Distance 字符串变换为另一字符串动态规划

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...