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

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

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

    紧接上篇文章,谈到App前赚钱的一些门道,其实还有很多了,需要你自己去挖掘App到底有什么价值.有价值的东西就能形成交易,而交易的过程中是用金钱作为流通手段,所以说赚钱没那么高大上,它的本质就是价值的 ...

  2. linux内核代码注释 赵炯 第三章引导启动程序

    linux内核代码注释 第三章引导启动程序 boot目录中的三个汇编代码文件   bootsect.s和setup.s采用近似intel的汇编语法,需要8086汇编器连接器as86和ld86 head ...

  3. -bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory 错误解决方案

    问题描述:sh文件中,在win环境下,用WinSCP编辑,出现如下错误: -bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or ...

  4. mybatis分页方式对比

    mybatis有两种分页方法(转自:http://blog.csdn.net/leozhou13/article/details/50394242) 1.内存分页,也就是假分页.本质是查出所有的数据然 ...

  5. 使用runtime关联对象将视图添加到视图的类目里

    //get方法 - (RJCircularLoaderView*)rj_circularLoaderView { RJCircularLoaderView *loaderView = objc_get ...

  6. NOJ——1669xor的难题(详细的树状数组扩展—异或求和)

    [1669] xor的难题 时间限制: 1000 ms 内存限制: 65535 K 问题描述 最近Alex学长有个问题被困扰了很久,就是有同学给他n个数,然后给你m个查询,然后每个查询给你l和r(左下 ...

  7. BZOJ 2733 [HNOI2012]永无乡 ——线段树 并查集

    用并查集维护联通块. 用线段树的合并来合并联通块. 自己YY了一个写法. #include <map> #include <cmath> #include <queue& ...

  8. 洛谷P3327 [SDOI2015]约数个数和 【莫比乌斯反演】

    题目 设d(x)为x的约数个数,给定N.M,求\(\sum_{i = 1}^{N} \sum_{j = 1}^{M} d(ij)\) 输入格式 输入文件包含多组测试数据.第一行,一个整数T,表示测试数 ...

  9. web 工程中利用Spring的 ApplicationContextAware接口自动注入bean

    最常用的办法就是用 ClassPathXmlApplicationContext, FileSystemClassPathXmlApplicationContext, FileSystemXmlApp ...

  10. javaweb学习总结(九)—— 通过Servlet生成验证码图片(转)

    (每天都会更新至少一篇以上,有兴趣的可以关注)转载自孤傲苍狼 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: