一、建造者模式概述

  建造者模式的本质:

    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. PHP 开发环境搭建

    1. PHP (1) download PHP and extra the zip file to the folder “C:\tools\php” (2) add the path “;C:\to ...

  2. mssqlserver,mysql,oracle分页查询

    分页查询语句是sql语句编程中很长见的一个典型应用,用sql语句来分页比一些分页控件的速度要快,所以sql语句的分页在实际编程应用中还是非常广泛的. 今天给大家分享几条不同数据库编程用的分页查询语句. ...

  3. Pandas数据结构

    Pandas处理以下三个数据结构 - 系列(Series) 数据帧(DataFrame) 面板(Panel) 这些数据结构构建在Numpy数组之上,这意味着它们很快. 维数和描述 考虑这些数据结构的最 ...

  4. HYSBZ - 2301 莫比乌斯反演

    链接 题解:直接用公式算,用容斥来减掉重复计算的部分 但是我犯了一个非常sb的错误,直接把abcd除k了,这样算a-1的时候就错了,然后举的例子刚好还没问题= = ,结果wa了好几发 //#pragm ...

  5. eclipse配置tomcat运行项目访问不加项目名

  6. flask bootstrap IE11的 兼容性问题

    在子模板内添加如下代码确保IE11的兼容性问题. {% extends 'bootstrap/base.html' %}{% block metas %} <meta http-equiv=&q ...

  7. 探索Javascript 异步编程

    在我们日常编码中,需要异步的场景很多,比如读取文件内容.获取远程数据.发送数据到服务端等.因为浏览器环境里Javascript是单线程的,所以异步编程在前端领域尤为重要. 异步的概念 所谓异步,是指当 ...

  8. svn: E220001: 遇到不可读的路径;拒绝访问。

    在客户端试图 svn merge 总是报svn: E220001: 遇到不可读的路径:拒绝访问.这个错误 提示 : SVN 遇到不可读的路径:拒绝访问. 英文是: Unreadable path en ...

  9. Nodejs实现爬虫抓取数据

    开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请自行百度安装教程...... 1.在项目文件夹安装两个必须的依赖包 npm install superagent --save-dev ...

  10. 原生js面向对象写法

    Mouse就是一个类,有自己的成员变量和成员方法,成员方法一定加上prototype,避免js原型的坑. var Mouse = function(id) { this.id = id; this.n ...