七、Builder 建造器模式
建造者模式(Builder): 使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,提供一种创建对象的最佳方式。
应用:
比如坑德基的汉堡、薯条、可乐、鸡翅是不变的,但是套餐是经常变化的
Java 中的 StringBuilder
如何使用: 一些基本部件不变,而其组合经常变化
与工厂模式的不同:建造者关注零件的组装过程,而工厂方法模式更关注零件的创建过程
建造者组成: 产品、抽象建造者、具体建造者、指挥者 4 个要素组成

例如:
【产品】装修一套房子:沙发、灯、浴室、地板
【指挥者】 Leader 指挥工人装修
【具体的建造者】工人
public class Room {
//沙发
private String sofa;
//灯
private String light;
//浴室
private String bashroom;
//地板
private String floor;
public String getSofa() {
return sofa;
}
public void setSofa(String sofa) {
this.sofa = sofa;
}
public String getLight() {
return light;
}
public void setLight(String light) {
this.light = light;
}
public String getBashroom() {
return bashroom;
}
public void setBashroom(String bashroom) {
this.bashroom = bashroom;
}
public String getFloor() {
return floor;
}
public void setFloor(String floor) {
this.floor = floor;
}
@Override
public String toString() {
return "Room{" +
"sofa='" + sofa + '\'' +
", light='" + light + '\'' +
", bashroom='" + bashroom + '\'' +
", floor='" + floor + '\'' +
'}';
}
}
public abstract class Builder {
//计划装修房子
protected Room room = new Room();
public abstract void buildSofa();
public abstract void buildLight();
public abstract void buildBashRoom();
public abstract void buildFloor();
public Room getResult(){
return room;
}
}
public class WorkerBuilder extends Builder{
@Override
public void buildSofa() {
room.setSofa("香港皇家沙发");
System.out.println("装修:香港皇家沙发");
}
@Override
public void buildLight() {
room.setLight("德州进口灯");
System.out.println("装修:德州进口灯");
}
@Override
public void buildBashRoom() {
room.setBashroom("伊丽莎白同款浴室");
System.out.println("装修:伊丽莎白同款浴室");
}
@Override
public void buildFloor() {
room.setFloor("天空绚烂地板");
System.out.println("装修:天空绚烂地板");
}
}
public class Leader {
protected Builder builder;
public Leader(Builder builder){
this.builder = builder;
}
public Room construct(){
builder.buildBashRoom();
builder.buildFloor();
builder.buildLight();
builder.buildSofa();
return builder.getResult();
}
}
public class Client {
public static void main(String []args){
Builder builder = new WorkerBuilder();
Leader leader = new Leader(builder);
Room newRoom = leader.construct();
System.out.println(newRoom);
}
}
结果:

七、Builder 建造器模式的更多相关文章
- 浅谈设计模式--建造器模式(Builder Pattern)
建造器模式,是于创建带有大量参数的对象,并避免因参数数量多而产生的一些问题(如状态不一致-JavaBean的setter模式). 如果参数多且有些是必须初始化的,有些是不一定需要初始化的时候,创建对象 ...
- 6. 星际争霸之php设计模式--建造器模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- Java设计模式之(七)——装饰器模式
1.什么是装饰器模式? Attach additional responsibilities to an object dynamically keeping the same interface.D ...
- Java设计模式:Builder(构建器)模式
概念定义 Builder模式是一步一步创建一个复杂对象的创建型模式.该模式将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来. 应用场景 对象创建过程比较复杂,或对创建顺序或组合有依 ...
- 设计模式(5)--Builder(建造模式)--创建型
1.模式定义: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品 ...
- Java设计模式(七)Decorate装饰器模式
一.场景描述 (一)问题 系统中最初使用Crystal Report(水晶报表)工具生成报表,并将报表发送给客户端查看,此时定义一CrystalReport工具类即可完成水晶报表的生成工作. 后续报表 ...
- jvm七种垃圾收集器
JVM_七种垃圾收集器介绍 本文中的垃圾收集器研究背景为:HotSpot+JDK7 一.垃圾收集器概述 如上图所示,垃圾回收算法一共有7个,3个属于年轻代.三个属于年老代,G1属于横跨年轻代和年老 ...
- 设计模式(8)--Decorator--装饰器模式--结构型
1.模式定义: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 2.模式特点: 装饰模式能够实现动态的为对象添加功能,是从一个对象 ...
- 设计模式---领域规则模式之解析器模式(Interpreter)
前提:领域规则模式 在特定领域内,某些变化虽然频繁,但可以抽象为某种规则.这时候,结合特定领域,将问题抽象为语法规则,从而给出该领域下的一般性解决方案. 典型模式 解析器模式:Interpreter ...
随机推荐
- 常见天气api
1. 心知天气API1.1 免费版:400次/小时,也就是9600次/天.国内城市数据,天气实况,3天预报,6项生活指数.这个API的免费版已经提供了很多年了,应该算最长寿稳定的那批API了……1.2 ...
- Java 日期与数字转换
package com.test; import org.apache.commons.lang.StringUtils; import org.junit.Test; import java.tex ...
- 《算法》第五章部分程序 part 5
▶ 书中第五章部分程序,包括在加上自己补充的代码,Knuth-Morris-Pratt 无回溯匹配,Boyer - Moore 无回溯匹配,Rabin - Karp 指纹匹配 ● Knuth-Morr ...
- <转载> MySQL 架构 http://www.cnblogs.com/winner-0715/p/6863802.html
1.MySQL整体逻辑架构 我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture) 图1 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术.它们都 ...
- 【Flex】自定义组件-combobox组件
1包结构 2 Test.mxml <?xml version="1.0" encoding="utf-8"?> <s:Application ...
- asp.net Log4Net错误日志个人总结
1)创建Global.asax protected void Application_Start(object sender, EventArgs e) { log4net.Config.XmlCon ...
- 高级js--(面向对象js,arguments,闭包,自调)
1. Arguments对象 l检测参数个数 1.在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们. function howManyArgs() { al ...
- 选择、操作web元素
11月1日 什么是web元素 Selenium自动化主要就是:选择界面元素,操作界面元素(输入操作:点击.输入文字.拖拽等,输出操作:获取元素的各种属性),根据界面上获取的数据进行分析和处理 选择元素 ...
- VS2003在解决方案范围内搜索卡死问题的解决
在Win7系统上使用VS2003的时候,在解决方案范围内搜索某个内容的时候,VS会卡死. 这是一个兼容性问题,Win7系统对VS2003的兼容性不好, 网上有人讲了一种解决方法是: 在vs2003的图 ...
- WDA-5-VIEW视图切换
这一部分介绍同一窗口下不同视图之间的链接跳转. 前提:完成上一步骤MAIN视图ALV显示. 1.效果展示 点击ALV物料下划线链接,页面跳转到物料明细页面. 2.实现过程 基于上一步骤在MAIN页面显 ...