一:学习之前咱们先看看一个需求

1)需要建房子:这一过程为打桩、砌墙、封顶
2)房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.
3)请编写程序,完成需求.

二:传统方式解决盖房需求


传统方式的问题分析
1)优点是比较好理解,简单易操作。
2)设计的程序结构,过于简单,没有设计缓存层对象,程序的扩展和维护不好. 也就是说,这种设计方案,把产品(即:房子) 和 创建产品的过程(即:建房子流程) 封装在一起,耦合性增强了。
3)解决方案:将产品和产品建造过程解耦 => 建造者模式.

三:建造者模式基本介绍

1:基本介绍
1)建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
2)建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们, 用户不需要知道内部的具体构建细节。

2:建造者模式的四个角色
1)Product(产品角色): 一个具体的产品对象。
2)Builder(抽象建造者): 创建一个 Product 对象的各个部件指定的 接口/抽象类。
3)ConcreteBuilder(具体建造者): 实现接口,构建和装配各个部件。
4)Director(指挥者): 构建一个使用 Builder 接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

3:类图


4:建造者模式解决盖房需求应用实例
1)需要建房子:这一过程为打桩、砌墙、封顶。不管是普通房子也好,别墅也好都需要经历这些过程,下面我们使用建造者模式(Builder Pattern)来完成
2)思路分析图解(类图)

四:代码演示

1:首先创建具体的产品对象

public class House {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}

2:创建建造者接口

public interface HouseBuilder {/*** 打地基*/void A();/*** 砌墙*/void B();/*** 吊顶*/void C();/*** 返回对象*/House retrunHouse();}

3:创建具体的建造者

public class CommonHouseBuilder implements HouseBuilder {@Overridepublic void A() {System.out.println("普通房屋打地基");}@Overridepublic void B() {System.out.println("普通房屋砌墙");}@Overridepublic void C() {System.out.println("普通房屋吊顶");}@Overridepublic House retrunHouse() {return new House();}
}
public class HighHouseBuilder implements HouseBuilder {@Overridepublic void A() {System.out.println("高楼房屋打地基");}@Overridepublic void B() {System.out.println("高楼房屋砌墙");}@Overridepublic void C() {System.out.println("高楼房屋吊顶");}@Overridepublic House retrunHouse() {return new House();}
}

4:创建建造指挥者

public class HouseDirector {private HouseBuilder houseBuilder;public HouseDirector(HouseBuilder houseBuilder) {this.houseBuilder = houseBuilder;}public House constructHouse(){houseBuilder.A();houseBuilder.B();houseBuilder.C();return houseBuilder.retrunHouse();}
}

5:客户端调用

public class Client {public static void main(String[] args) {//创建一个普通房子指挥者HouseDirector houseDirector = new HouseDirector(new CommonHouseBuilder());House commonHouse = houseDirector.constructHouse();System.out.println("建造了一个普通房子");System.out.println(".........................................");//创建一个高楼大厦HouseDirector houseDirector2 = new HouseDirector(new HighHouseBuilder());House highHouse = houseDirector2.constructHouse();System.out.println("建造了一个高楼房子");}
}

6:输出结果

五:总结

1)客户端(使用程序)不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象

2)每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同的产品对象

3)可以更加精细地控制产品的创建过程 。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰, 也更方便使用程序来控制创建过程

4)增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”

5)建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。

6)如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,因此在这种情况下,要考虑是否选择建造者模式.

7)抽象工厂模式 VS 建造者模式
抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式不需要关心构建过程,只关心什么产品由什么工厂生产即可。而建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品

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

  1. Python设计模式-建造者模式

    Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...

  2. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

  3. 设计模式 建造者模式_设计模式:建造者

    设计模式 建造者模式 有时需要在应用程序中创建一个复杂的对象. 一种解决方案是Factory模式,另一种是Builder设计模式. 在某些情况下,您甚至可以结合使用这两种模式. 但是在本文中,我想研究 ...

  4. 设计建造者模式java代码,Java设计模式-建造者模式

    定义 Separate the construction of a complex object from its representation so that the sameconstructio ...

  5. python创造者_python 设计模式-建造者模式

    问题:在上一篇python设计模式:抽象工厂模式中,我们尝试用抽象工厂模式规范化了 Pizza 原材料的供应以及 Pizza 的创建.但是我们忽略了一个问题,那就是每种 Pizza 的烘焙时间依赖于生 ...

  6. java设计模式-建造者模式

    概念:使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. ...

  7. 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...

    11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:"牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我们公司制作了,不过这次又额外增 ...

  8. 大话设计模式—建造者模式

    建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 一个 Builder 类会一步一步构造最 ...

  9. 我的Java设计模式-建造者模式

    在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...

  10. Java常用设计模式————建造者模式

    引言 建造者模式(Builder Pattern)使用多个简单对象一步一步构建成一个复杂的对象.这种类型的设计模式属于建造型模式,它提供了一种创建对象的最佳方式. 一个Builder会一步步构建最终的 ...

最新文章

  1. BAD PASSWORD 解决方法
  2. 在shell脚本中没有换行符的#39;echo#39;
  3. qt socket 传递结构体 结构体中有list_计算机网络应用--Socket编程实验(二)
  4. PHP 字符串替换 substr_replace 与 str_replace 函数
  5. C++描述杭电OJ 2005.第几天? ||
  6. github 如何设置项目的语言显示
  7. 中年高校教师、行政人员的21个特征!
  8. r语言实现sem_统计基础:【18】使用Excel和R语言来实现抽样
  9. 【原创】有关Buffer使用,让你的日志类库解决IO高并发写
  10. 关于Java之IO流音乐拼接小项目
  11. P值计算(Excel)
  12. pvr.ccz 与 png 格式 互转的解决方案
  13. [附源码]Python计算机毕业设计Django大学生考勤管理系统论文
  14. OpenGL核心技术之Gamma校正
  15. 09组团队项目-Beta冲刺-5/5
  16. 华为设备配置MAC地址
  17. 如何使用物联网低代码平台进行模型管理?
  18. 【C语言】判断一个浮点数是否等于零
  19. IE if注释判断( [if gte IE 8] )的解释网上的完全乱七八糟啊!
  20. 《GhostXP_SP2电脑公司特别版_v8.5》

热门文章

  1. [spring源码学习]六、IOC源码-BeanFactory和factory-bean
  2. 迭代器、模块的简单总结
  3. 独家专访英特尔AI布道师 | 通信工程到人工智能的高质量转型
  4. STM32学习笔记1(初识STM32)
  5. 给TextView设置颜色选择器selector
  6. 使用dockpanel动态添加picturebox并绑定图片
  7. 华晨宏盛让理财更有实用性的小窍门有哪些?最好的理财方法有哪些
  8. Android,SharedPreferences的使用
  9. 学计算机听课不重要,评课常用语50条,再也不怕评课了!
  10. Java实现包含多级目录文件的筛选删除操作