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

建造者模式将一个产品的内部表象和产品的生成过程分割开来,建造对象的时候只需要指定需要建造的类型,而不必了解具体的建造过程。

一个玩具工厂,工人们建造新的玩具人时,需要逐个安装各个部分,种类有胖虎和小夫。万一粗心大意忘记装了某个部分,就出现了不合格的玩具,缺胳膊少腿。

为了减少次品率,老板引入了一台机器,设定好程序后,工人只要选择制造的玩具种类,按下开关之后机器自动就去装配对应的玩具。

代码结构图如下:

用代码来表示就是====>>

首先是一个建造人物的接口(机器类,作为一个制造者,对玩具而言是个上帝般的角色,展示了装配一个玩具的各个过程):

package com.hy.bulider;

public class God {

private IPerson person;

public God(IPerson person) {

this.person = person;

}

public void createPerson() {

person.buildHead();

person.buildBody();

person.buildArms();

person.buildHands();

person.buildLegs();

person.buildFoots();

System.out.println("合成了一个"+person);

}

}

然后是玩具的接口类和两个具体的玩具实现类(机器程序设定的程序,规定了作为一个玩具必须要有的零件):

package com.hy.bulider;

public interface IPerson {

public void buildHead();

public void buildBody();

public void buildArms();

public void buildHands();

public void buildLegs();

public void buildFoots();

public String toString();

}

package com.hy.bulider;

public class Fatter implements IPerson{

public void buildHead() {

System.out.println("組成胖頭部");

}

public void buildBody() {

System.out.println("组成胖身体");

}

public void buildArms() {

System.out.println("组成胖胳膊");

}

public void buildHands() {

System.out.println("组成胖手");

}

public void buildLegs() {

System.out.println("组成胖腿");

}

public void buildFoots() {

System.out.println("组成胖脚");

}

@Override

public String toString() {

return "胖虎";

}

}

package com.hy.bulider;

public class Thinner implements IPerson{

public void buildHead() {

System.out.println("組成瘦頭部");

}

public void buildBody() {

System.out.println("组成瘦身体");

}

public void buildArms() {

System.out.println("组成瘦胳膊");

}

public void buildHands() {

System.out.println("组成瘦手");

}

public void buildLegs() {

System.out.println("组成瘦腿");

}

public void buildFoots() {

System.out.println("组成瘦脚");

}

public String toString() {

return "小夫";

}

}

最后是测试类:

package com.hy.bulider;

public class Test {

public static void main(String[] args) {

Thinner thinner = new Thinner();

God god = new God(thinner);

god.createPerson();

Fatter fatter = new Fatter();

god = new God(fatter);

god.createPerson();

}

}

这样工人工作的时候只需要选择特定的模型,然后运行机器就可以得到合格的玩具,而且不必关心装配玩具的具体细节。即使后面新增了大雄静香等需求订单,只需要在机器中设定装配程序就可以正常工作。

另外,如果有更多的细节的实现,比如脸部的眼睛鼻子等等,则需要综合权衡接口类中的构造方法是否足够普遍,别的具体构造者实现是否需要这些方法。

建造者模式的结构图如下:

Bulider是为创建一个Product对象的各个部件指定的抽象接口。

ConcreteBuilder是具体的建造者,实现Builder接口构造和装配各个部件。

Product指具体的角色。

Director指挥者,构建正在使用Builder接口的对象。

建造者模式主要应用的场景:创建一些复杂的对象,这些对象内部构建间的建造顺序是稳定的,但对象内部的构建通常面临着复杂的变化。即:当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方法时适用建造者模式。

建造者模式好处:

1、最主要的好处是,使得对象的构建与表示分离,可以让表示独立于过程而独立的变化,并且客户端不再需要关心具体的构建过程和表示。

2、由于固定的表示由具体的制造者提供,所以要重复制造几个表示相同的对象的时候,只需要让指挥者控制制造者再进行一次即可。

模板方法模式,遇到一系列步骤构成的过程需要执行,这个过程从高层次上看是相同的,这时把不变行为搬移到父类(超类),提供了一个代码复用的平台,去除了类中的重复代码来体现它的优势。也就是说,当不变和可变的行为在方法的子类实现中混合在一起的时候,把这些行为搬移到单一的地方(父类/超类),帮助子类摆脱重复的不变行为的纠缠。

建造者模式的对象构建过程和这个有些类似,对象的接口类中定义了对象普遍的构造方法,具体的对象构造者建造过程和细节。不同的地方在于建造者模式中对象的接口类只定义对象普遍的构造方法,在建造类中定义了对象的构造流程。若是没有构造者类,建造者模式可以看作一个模板方法模式。

模板方法模式是行为型模式,不仅描述对象或类的模式,还描述它们之间的通信方式,实现过程中采用继承机制在类间分派行为。建造者模式是创建型模式,抽象了实例化过程。在实现方法的骨架层次上,建造者模式中使用的是组合的方式。所以建造者更灵活,而且也可以避免由继承而引发的各种问题。

java设计模式建造_java设计模式-建造者模式相关推荐

  1. java设计模式建造_Java设计模式——建造模式(Builder Pattern)

    Builder模式常用例子 今天就简单粗暴的介绍一下Builder模式概念和使用. Dialog的创建 AlertDialog dialog = new AlertDialog.Builder(thi ...

  2. 北风设计模式课程---7、建造者模式

    北风设计模式课程---7.建造者模式 一.总结 一句话总结: 设计模式都是对生活中好的做事方法的一些抽象,使得各司其职,减少出错. 建造者模式可以看做模仿的生活中:设计师,施工队做复杂房子交给客户的场 ...

  3. 设计模式(五)——建造者模式

    设计模式(五)--建造者模式 一.建造者模式简介 1.建造者模式简介 建造者模式将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式和抽象工厂模式在功能上很相似,都是用来 ...

  4. 肝一肝设计模式【四】-- 建造者模式

    系列文章目录 肝一肝设计模式[一]-- 单例模式 传送门 肝一肝设计模式[二]-- 工厂模式 传送门 肝一肝设计模式[三]-- 原型模式 传送门 肝一肝设计模式[四]-- 建造者模式 传送门 肝一肝设 ...

  5. 设计模式(五)——建造者模式详解

    设计模式(五)--建造者模式详解 概述 结构 代码案例 优缺点 使用场景 模式扩展 创建者模式对比 工厂方法模式和建造者模式 抽象工厂模式和建造者模式 概述 建造者模式就是说将一个复杂对象的构建和表示 ...

  6. java设计模式 建造模式_java设计模式(三)建造者模式

    开篇废话 周末因懒的原因,停更了两天.今天主要研究建造者模式.畅游各大博客网站,推荐一篇关于建造者模式的博客http://blog.csdn.net/self_study/article/detail ...

  7. java设计模式——创建型之建造者模式

    自大学课程初识设计模式以来,就越发觉得有必要系统学习一下设计模式. 刚好在实习前准备期间课比较少,抽出一点时间整理一下记一些笔记,复制粘贴比较多. 笔记比较适合学习过设计模式的同学. Builder ...

  8. 大聪明教你学Java设计模式 | 第二篇:建造者模式

    前言 大聪明在写代码的过程中发现设计模式的影子是无处不在,设计模式也是软件开发人员在软件开发过程中面临的一般问题的解决方案.大聪明本着"独乐乐不如众乐乐"的宗旨与大家分享一下设计模 ...

  9. java设计模式(五)--建造者模式(Builder)

    转载:http://zz563143188.iteye.com/blog/1847029 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象 ...

最新文章

  1. 一次特殊的经历和迷茫-小米平板
  2. 【PC工具】windows图片文字识别软件,天若OCR文字识别软件
  3. rocketmq官网和其它资料
  4. spring整合struts2时作用域scope解析
  5. tfpose与openpose区别_人体姿态识别--Openpose+Tensorflow
  6. azure第一个月_MLOps:两个Azure管道的故事
  7. LeetCode 523. 连续的子数组和(求余 哈希)
  8. linux如查看是否安装了mysql_linux中如何查看mysql是否安装
  9. 1644 免费馅饼 题解(c++)(S.B.S.)
  10. Python中的for循环,while循环
  11. c++循环读取多行文本文件
  12. php使用使用外部变量的值,PHP实现函数内修改外部变量值的方法示例
  13. 升序堆和降序堆(优先队列) 洛谷1801
  14. 从 Nginx 到 Pandownload,程序员如何避免面向监狱编程?
  15. python 解析模块脚本_Python HTMLParser模块解析html获取url实例
  16. Replugin源码及原理深度剖析--唯一Hook点原理
  17. x5650服务器装系统,笔记本处理器天梯图,小猪教您最新笔记本显卡天梯图
  18. nginx 404及5xx页面配置
  19. 微信小程序通过服务号推送模板消息
  20. LaTeX 美化表格位置

热门文章

  1. 华为机试题【9】-整数分割为2的幂次
  2. 数独求解 DFS DLX
  3. [[UIScreen mainScreen] bounds]获取尺寸不对
  4. 黑客与画家 part1 版权声明 part2 O'Reilly Media,Ina.介绍
  5. Redis及其Sentinel配置项详细说明
  6. BZOJ #3625 CF #438E 小朋友和二叉树
  7. 虚方法表与动态分派机制详解
  8. Visual Studio图形调试器详细使用教程(基于DirectX11)
  9. onethink二级导航调用
  10. WebAPI返回数据类型