06建造者模式Builder
一、什么是建造者模式
Builder模式也叫建造者模式或者生成器模式, 是由GoF提出的23种设计模式中的一种。
Builder模式是一种对象创建型模式之一,用来 隐藏复合对象的创建过程,它把复合对象的创建 过程加以抽象,通过子类继承和重载的方式,动 态地创建具有复合属性的对象。
二、建造者模式的结构

三、建造者模式应用场景
- 对象的创建:Builder模式是为对象的创建而设计的模式
- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象
- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法
房子
/*
* 房子
*/
public class House {
// 地板
private String floor;
// 墙
private String wall;
// 屋顶
private String housetop; public String getFloor() {
return floor;
} public void setFloor(String floor) {
this.floor = floor;
} public String getWall() {
return wall;
} public void setWall(String wall) {
this.wall = wall;
} public String getHousetop() {
return housetop;
} public void setHousetop(String housetop) {
this.housetop = housetop;
}
}
工程队
/*
* 工程队
*/
public interface HouseBuilder {
//修地板
public void makeFloor();
//修墙
public void makeWall();
//修屋顶
public void makeHousetop();
public House getHouse();
}
平房工程队 实现工程队
/*
* 平房工程队
*/
public class PingFangBuilder implements HouseBuilder {
House house = new House(); public void makeFloor() {
house.setFloor("平房-->地板");
} public void makeHousetop() {
house.setHousetop("平房-->房顶");
} public void makeWall() {
house.setWall("平房-->墙");
} public House getHouse() {
return house;
}
}
测试
public class MainClass {
public static void main(String[] args) {
// //客户直接造房子
// House house = new House();
// house.setFloor("地板");
// house.setWall("墙");
// house.setHousetop("屋顶");
//由工程队来修
HouseBuilder builder = new GongyuBuilder();
//设计者来做
HouseDirector director = new HouseDirector();
director.makeHouse(builder);
House house = builder.getHouse();
System.out.println(house.getFloor());
System.out.println(house.getWall());
System.out.println(house.getHousetop());
}
}
设计
//设计者
public class HouseDirector { public void makeHouse(HouseBuilder builder) {
builder.makeFloor();
builder.makeWall();
builder.makeHousetop();
}
}
公寓工程队 实现工程队
//公寓建造者
public class GongyuBuilder implements HouseBuilder{
House house = new House(); public House getHouse() {
return house;
} public void makeFloor() {
house.setFloor("公寓-->地板");
} public void makeHousetop() {
house.setHousetop("公寓-->房顶");
} public void makeWall() {
house.setWall("公寓-->墙");
}
}
06建造者模式Builder的更多相关文章
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 建造者模式(Builder)-宏观的使用角度
建造者模式(Builder) 建造者模式是用来解决产品对象的创建过程是由多个零件组成的情况,这些零件与产品本身是组合关系,也就是部分与整体,这些零件的创建顺序,还有一些创建中的逻辑,都是稳定的,可以封 ...
- 【设计模式】建造者模式 Builder Pattern
前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...
- 建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 它可以将多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 主要解决:主要解决在软 ...
- 二十四种设计模式:建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...
- iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...
- 建造者模式(Builder)——从组装电脑开始
建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电 ...
- 设计模式—建造者模式(Builder)
title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...
随机推荐
- CentOS下创建网桥
说明:以下创建的是永久网桥,即重启后依然生效. 0.安装网桥的依赖 yum -y install tunctl bridge-utils 1.创建网桥配置文件 UUID=`uuidgen` cat & ...
- 网络的FIN_WAIT_2状态解释和分析
关于网络设备的FIN_WAIT_2状态解释出处:http://hi.baidu.com/netdemon1981/blog/item/584bfbb2aeb1d4acd9335ad9.html 在HT ...
- 面试题:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。(c++实现)
实例说明 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ...
- Android Studio下加入百度地图的使用(二)——定位服务
上一章(http://www.cnblogs.com/jerehedu/p/4891216.html)中我们已经完成了环境的搭建,这一章我们来研究一下如何使用. 第一步:在xml文件中加入以下权限 & ...
- hive中 regexp_replace的用法,替换特殊字符问题
数据仓库中有的字段不合格,有特殊字符,比如换行符. poi_name \n19013 \n12013 怎么把换行符替换掉呢? https://cwiki.apache.org/confluence/d ...
- .NET Unity XML 配置文件(2)
本文内容 Unity 配置示意图 Unity 的 XML 架构 参考资料 研究配置文件总是很麻烦,而且很可能因为版本问题,会稍有不同.如果你不确定 Unity 是否支持以及如何支持某个元素,就看下相关 ...
- 使用JDBC在MySQL数据库中快速批量插入数据
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch ...
- ASP.NET CORE 之 在IIS上部署MVC项目
与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kestrel ...
- PPTP 在Centos 7.1 建立方法与失效处理
# yum install pptp pptp-setup pptpsetup --create vpn --server (serverName) --username (Username) - ...
- linux/unix命令参考