设计模式 ---建造者模式
一:学习之前咱们先看看一个需求
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 建造者模式
抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式不需要关心构建过程,只关心什么产品由什么工厂生产即可。而建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品
设计模式 ---建造者模式相关推荐
- Python设计模式-建造者模式
Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...
- 说说设计模式~建造者模式(Builder)
建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...
- 设计模式 建造者模式_设计模式:建造者
设计模式 建造者模式 有时需要在应用程序中创建一个复杂的对象. 一种解决方案是Factory模式,另一种是Builder设计模式. 在某些情况下,您甚至可以结合使用这两种模式. 但是在本文中,我想研究 ...
- 设计建造者模式java代码,Java设计模式-建造者模式
定义 Separate the construction of a complex object from its representation so that the sameconstructio ...
- python创造者_python 设计模式-建造者模式
问题:在上一篇python设计模式:抽象工厂模式中,我们尝试用抽象工厂模式规范化了 Pizza 原材料的供应以及 Pizza 的创建.但是我们忽略了一个问题,那就是每种 Pizza 的烘焙时间依赖于生 ...
- java设计模式-建造者模式
概念:使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. ...
- 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...
11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:"牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我们公司制作了,不过这次又额外增 ...
- 大话设计模式—建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 一个 Builder 类会一步一步构造最 ...
- 我的Java设计模式-建造者模式
在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...
- Java常用设计模式————建造者模式
引言 建造者模式(Builder Pattern)使用多个简单对象一步一步构建成一个复杂的对象.这种类型的设计模式属于建造型模式,它提供了一种创建对象的最佳方式. 一个Builder会一步步构建最终的 ...
最新文章
- BAD PASSWORD 解决方法
- 在shell脚本中没有换行符的#39;echo#39;
- qt socket 传递结构体 结构体中有list_计算机网络应用--Socket编程实验(二)
- PHP 字符串替换 substr_replace 与 str_replace 函数
- C++描述杭电OJ 2005.第几天? ||
- github 如何设置项目的语言显示
- 中年高校教师、行政人员的21个特征!
- r语言实现sem_统计基础:【18】使用Excel和R语言来实现抽样
- 【原创】有关Buffer使用,让你的日志类库解决IO高并发写
- 关于Java之IO流音乐拼接小项目
- P值计算(Excel)
- pvr.ccz 与 png 格式 互转的解决方案
- [附源码]Python计算机毕业设计Django大学生考勤管理系统论文
- OpenGL核心技术之Gamma校正
- 09组团队项目-Beta冲刺-5/5
- 华为设备配置MAC地址
- 如何使用物联网低代码平台进行模型管理?
- 【C语言】判断一个浮点数是否等于零
- IE if注释判断( [if gte IE 8] )的解释网上的完全乱七八糟啊!
- 《GhostXP_SP2电脑公司特别版_v8.5》