一、建造者模式概述

  建造者模式的本质:

    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. srm开发(基于ssh)(3)

    联系人管理 (1)客户和联系人一对多配置(重点) (2)新增联系人 -新增功能实现 -Struts2实现文件上传 (3)联系人列表 -no session问题 (4)客户和联系人级联删除 联系人管理模 ...

  2. bitmap==null

    bitmap==null 一.问题介绍 调试找bug的过程出现bitmap==null,而传过来创建bitmap的byte array有数据, 结果看了函数说明: 果断知道是那个图片没有办法decod ...

  3. ubuntu16.04 运行elasticfusion

    环境:Ubuntu16.04 64bit    Kinect V1 XBOX 360 1.安装OpenNI2并试运行 https://fredfire1.wordpress.com/2016/09/2 ...

  4. spirng: srping mvc配置(访问路径配置)搭建SpringMVC——最小化配置

    搭建SpringMVC——最小化配置 最开始接触网页的时候,是纯的html/css页面,那个时候还是用Dreamweaver来绘制页面. 随着网站开发的深入,开始学习servlet开发,记得最痛苦的就 ...

  5. Log4j 发送 EMail 的配置

    项目上线后,运行时往往也还会有异常发生,在异常抛出时,希望即时的得到反馈.所以需要配置LOG4J的发送EMAIL功能. 项目中原来使用的的Log4j版本为1.2.9 ,但此版本并不支持邮件服务的认证功 ...

  6. plsql连接不上oracle

    由于oracle存在64位的,但是目前plsql只有32位.导致登录后报错 -------------------------------------------------------------- ...

  7. XML的两种解析方式

    JDK提供的XML解析方式分为两种:DOM方式和SAX方式DOM:Document Object Model.需要读取整个XML文档,先需要在内存中构架代表整个DOM树的Document对象,可以进行 ...

  8. 网络之Call Phone、Web、SMS、Email

    1. 准备工作:导入信息UI库 #import <MessageUI/MessageUI.h>2. Call Phone 方式一: 拼接字符串 注意开头是tel: 这种方式打电话回不到原来 ...

  9. react: typescript-webpack项目基本配置

    1.webpack.config.js basic const webpack = require('webpack'); const autoprefixer = require('autopref ...

  10. 【python】ConfigParser写入和读取配置文件

    参照博客 http://www.cnblogs.com/TankXiao/p/3038350.html 配置文件格式: [section1] name = tank age = 28 [section ...