一、建造者模式概述

  建造者模式的本质:

    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)的更多相关文章

  1. 【GOF23设计模式】建造者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...

  2. GOF23设计模式之建造者模式

    GOF23设计模式之建造者模式 场景: 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样的一个问题需要处理: 装配这些子组件是不是有个步骤问题? 实际开发中,我们所 ...

  3. 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

    原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...

  4. 【设计模式】建造者模式 Builder Pattern

    前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...

  5. 二十四种设计模式:建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...

  6. 设计模式之建造者模式——Builder

    一.概述 Builder模式,中文名为建造者模式,又名生成器模式.构建者模式等,是创建型设计模式之一.用于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 1.适用性: 对象 ...

  7. 设计模式-05建造者模式(Builder Pattern)

    1.模式动机 比如我们要组装一台电脑,都知道电脑是由 CPU.主板.内存.硬盘.显卡.机箱.显示器.键盘和鼠标组成,其中非常重要的一点就是这些硬件都是可以灵活选择,但是组装步骤都是大同小异(可以组一个 ...

  8. 设计模式之建造者模式(Builder)

    建造者模式原理:建造模式主要是用于产生对象的各个组成部分,而抽象工厂模式则用于产生一系列对象,建造者模式而且要求这些对象的组成部分有序. 代码如下: #include <iostream> ...

  9. 设计模式之建造者模式Builder(创建型)

    1. 概述 在软件开发的过程中,当遇到一个“复杂的对象”的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定 ...

随机推荐

  1. Spring-boot CLI下载

    Spring-boot CLI下载地址: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#getting-s ...

  2. PermutationSequence,求第k个全排列

    问题描述:给定一个数组,数组里面元素不重复,求第k个全排列. 算法分析:这道题就是用到取商取模运算. public String getPermutation(int n, int k) { // i ...

  3. 删除读取失败的服务 <读取描述失败错误代码2>

    1.以管理员身份运行命令提示符 2.sc delete 服务名

  4. [ SSH 两种验证方式原理 ]

    SSH登录方式主要分为两种: 1. 用户名密码验证方式 说明: (1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户: (2) 用户会根据服务器发来的公钥对密码进行加密: (3) 加密后的信 ...

  5. 10 个深恶痛绝的 Java 异常

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 今天,来列一下 Java 中经常遇到的前 10 个异常,排名 ...

  6. 进入root权限操作

    su:authentication failure的解决办法 $ su - rootPassword:su: Authentication failureSorry. 这时候输入 $ sudo pas ...

  7. 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 ...

  8. css类名大全以及其他关键词

    标签 abbr 缩写的标记 token-based-auth-backend  后端 token-based-auth-frontend  前端 signin 登陆  Sign in / Sign u ...

  9. 【C#基本功】1》panel的C#用法 panel

    上面截图是panel在labview中的用法,在labview中panel加动态调用技术可以解决很多难题. 对于刚刚接触C#的我来说,如何实现pannel动态加载界面,也是一个必须首要克服的难点. 经 ...

  10. @ResponseBody与@RestController的作用与区别

    在使用springmvc框架的时候,在处理json的时候需要用到spring框架特有的注解@ResponseBody或者@RestController注解,这两个注解都会处理返回的数据格式,使用了该类 ...