GOF23设计模式之建造者模式(builder)
一、建造者模式概述
建造者模式的本质:
1.分离了对象子组件的单独构造(由Builder负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的过程复杂的情况下使用。
2.由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法,装配算法的解耦,实现了更好的复用。
二、建造者模式
1.创建飞船部件及飞船
/**
* 飞船
* @author CL
*
*/
public class Airship {
private Engine engine; //发动机
private OrbitalMouble orbitalMouble; //轨道舱
private EscapeTower escapeTower; //逃逸塔 public void launch() {
System.out.println("发射!");
} public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public OrbitalMouble getOrbitalMouble() {
return orbitalMouble;
}
public void setOrbitalMouble(OrbitalMouble orbitalMouble) {
this.orbitalMouble = orbitalMouble;
}
public EscapeTower getEscapeTower() {
return escapeTower;
}
public void setEscapeTower(EscapeTower escapeTower) {
this.escapeTower = escapeTower;
} } /**
* 发动机类
*/
class Engine {
private String name; public Engine(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} } /**
* 轨道舱类
*/
class OrbitalMouble {
private String name; public OrbitalMouble(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
} /**
* 逃逸塔类
*/
class EscapeTower {
private String name; public EscapeTower(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
2.创建飞船的构建接口和装配接口
/**
* 飞船的构建者
* @author CL
*
*/
public interface AirshipBuilder {
/**
* 构建发动机
* @return
*/
Engine builderEngine();
/**
* 构建轨道舱
* @return
*/
OrbitalMouble builderOrbitalMouble();
/**
* 构建逃逸塔
* @return
*/
EscapeTower builderEscapeTower();
}
/**
* 飞船的装配者
* @author CL
*
*/
public interface AirshipDirector {
/**
* 装配飞船
* @return
*/
Airship directorAirship();
}
3.创建构建接口和装配接口的实现类
/**
* XAAU牌飞船构建者的实现类
* @author CL
*
*/
public class XAAUAirshipBuilder implements AirshipBuilder { public Engine builderEngine() {
System.out.println("构建发动机");
return new Engine("XAAU牌发动机");
} public OrbitalMouble builderOrbitalMouble() {
System.out.println("构建轨道舱");
return new OrbitalMouble("XAAU牌轨道舱");
} public EscapeTower builderEscapeTower() {
System.out.println("构建逃逸塔");
return new EscapeTower("XAAU牌逃逸塔");
} }
/**
* XAAU牌飞船装配者的实现类
* @author CL
*
*/
public class XAAUAirshipDirector implements AirshipDirector { private AirshipBuilder builder; public XAAUAirshipDirector(AirshipBuilder builder) {
this.builder = builder;
} public Airship directorAirship() {
//构建飞船部件
Engine e = builder.builderEngine();
OrbitalMouble o = builder.builderOrbitalMouble();
EscapeTower et = builder.builderEscapeTower(); //装配成飞船对象
Airship ship = new Airship();
ship.setEngine(e);
ship.setOrbitalMouble(o);
ship.setEscapeTower(et); return ship;
} }
4.测试
/**
* 利用建造者模式创建XAAU牌飞船对象的实例
* @author CL
*
*/
public class Client { public static void main(String[] args) {
AirshipDirector director = new XAAUAirshipDirector(new XAAUAirshipBuilder()); Airship ship = director.directorAirship(); System.out.println(ship.getEngine().getName());
System.out.println(ship.getOrbitalMouble().getName());
System.out.println(ship.getEscapeTower().getName()); ship.launch();
}
}
控制台输出:
构建发动机
构建轨道舱
构建逃逸塔
XAAU牌发动机
XAAU牌轨道舱
XAAU牌逃逸塔
发射!
三、建造者模式常见应用场景
(1)StringBuilder类中的append方法;
(2)SQL中的PreparedStatement;
(3)JDOM中,DomBuilder、SAXBuilder;
(4)………………
GOF23设计模式之建造者模式(builder)的更多相关文章
- 【GOF23设计模式】建造者模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...
- GOF23设计模式之建造者模式
GOF23设计模式之建造者模式 场景: 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样的一个问题需要处理: 装配这些子组件是不是有个步骤问题? 实际开发中,我们所 ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 【设计模式】建造者模式 Builder Pattern
前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...
- 二十四种设计模式:建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...
- 设计模式之建造者模式——Builder
一.概述 Builder模式,中文名为建造者模式,又名生成器模式.构建者模式等,是创建型设计模式之一.用于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 1.适用性: 对象 ...
- 设计模式-05建造者模式(Builder Pattern)
1.模式动机 比如我们要组装一台电脑,都知道电脑是由 CPU.主板.内存.硬盘.显卡.机箱.显示器.键盘和鼠标组成,其中非常重要的一点就是这些硬件都是可以灵活选择,但是组装步骤都是大同小异(可以组一个 ...
- 设计模式之建造者模式(Builder)
建造者模式原理:建造模式主要是用于产生对象的各个组成部分,而抽象工厂模式则用于产生一系列对象,建造者模式而且要求这些对象的组成部分有序. 代码如下: #include <iostream> ...
- 设计模式之建造者模式Builder(创建型)
1. 概述 在软件开发的过程中,当遇到一个“复杂的对象”的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定 ...
随机推荐
- Spring-boot CLI下载
Spring-boot CLI下载地址: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#getting-s ...
- PermutationSequence,求第k个全排列
问题描述:给定一个数组,数组里面元素不重复,求第k个全排列. 算法分析:这道题就是用到取商取模运算. public String getPermutation(int n, int k) { // i ...
- 删除读取失败的服务 <读取描述失败错误代码2>
1.以管理员身份运行命令提示符 2.sc delete 服务名
- [ SSH 两种验证方式原理 ]
SSH登录方式主要分为两种: 1. 用户名密码验证方式 说明: (1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户: (2) 用户会根据服务器发来的公钥对密码进行加密: (3) 加密后的信 ...
- 10 个深恶痛绝的 Java 异常
异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 今天,来列一下 Java 中经常遇到的前 10 个异常,排名 ...
- 进入root权限操作
su:authentication failure的解决办法 $ su - rootPassword:su: Authentication failureSorry. 这时候输入 $ sudo pas ...
- HTTP Status 500 - Unable to instantiate Action, customerAction, defined for 'customer_toAddPage' i
使用struts2时碰到这样的错误 HTTP Status 500 - Unable to instantiate Action, customerAction, defined for 'custo ...
- css类名大全以及其他关键词
标签 abbr 缩写的标记 token-based-auth-backend 后端 token-based-auth-frontend 前端 signin 登陆 Sign in / Sign u ...
- 【C#基本功】1》panel的C#用法 panel
上面截图是panel在labview中的用法,在labview中panel加动态调用技术可以解决很多难题. 对于刚刚接触C#的我来说,如何实现pannel动态加载界面,也是一个必须首要克服的难点. 经 ...
- @ResponseBody与@RestController的作用与区别
在使用springmvc框架的时候,在处理json的时候需要用到spring框架特有的注解@ResponseBody或者@RestController注解,这两个注解都会处理返回的数据格式,使用了该类 ...