一、建造者模式概述

  建造者模式的本质:

    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. ImageView显示网络上的图片

    ImageView显示网络上的图片 一.简介 二.方法 1)ImageView显示网络上的图片方法 第一步:从网络上下载图片 byte[] byteArr = downImage();//这个是自己写 ...

  2. MVC,MVP 和 MVVM 的图示,区别

    作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身 ...

  3. openvswitch的原理和常用命令

    一.Openvswitch工作原理 openvSwitch是一个高质量的.多层虚拟交换机,使用开源Apache2.0许可协议,由 Nicira Networks开发,主要实现代码为可移植的C代码.它的 ...

  4. 【OpenGL ES】关于VBO(Vertex Buffer Object)的一些坑——解析一些关于glBuffer的函数

    最近在写毕设的时候用到OpenGL ES中的VBO,由于对一些接口用到的变量不了解被坑得很惨,在此记录一下防止以后再被坑. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cn ...

  5. ARM体系结构总结

    特殊功能寄存器与外设绑定,通用寄存器是与CPU绑定. ARM是RISC架构 常用ARM汇编指令只有二三十条 ARM是低功耗CPU ARM的架构非常适合单片机.嵌入式.尤其是物联网领域:而服务器等高性能 ...

  6. Django restfull规范

    一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角 ...

  7. position值详情

    1.absolute属性: 英文直译成汉语的解释有:绝对,独立的.显然在做为css中position属性的值时“绝对”这个意思更恰当一些.他的作用是:生成绝对定位的元素,相对于static 定位以外的 ...

  8. 《转》浅谈EJB

    ejb一直是一个让我很纠结的技术,虽然ejb作为sun推荐的最佳实践,在sun的J2EE教程中,推荐jsp和servlet作为view层,ejb作为业务逻辑层. 上述就是J2EE教程讲J2EE体系中J ...

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

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

  10. Django 使用 内置 content-type

    django内置的content-type组件, 记录了项目中所有model元数据的表 可以通过一个ContentType表的id和一个具体表中的id找到任何记录,及先通过ContenType表的id ...