GOF23设计模式之建造者模式
GOF23设计模式之建造者模式
场景:
我们要建造一个复杂的产品。比如:神州飞船,Iphone。这个复杂的产品的创建。有这样的一个问题需要处理:
装配这些子组件是不是有个步骤问题?
实际开发中,我们所需要的对象构建时,也非常复杂,有很多步骤需要处理时。
本质:
1)分离了对象子组件的单独构造(由 Builder 来负责)和装配(由 Director 负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。
2)由于时下按了构建和装配的解耦。不同的构建起,相同的装配,也可以做出不同的对象;相同的构建起,不同的装配顺序也可以做出不同的对象。也就算实现了构建算法、装配算法的解耦,实现了更好的复用。
package cn.taosir.design.create.builders;
/**
* 宇宙飞船
* @author taosir
*
*/
public class AirShip {
private OrbitalModule orbitalModule;//轨道舱
private Engine engine;//发动机
private EscapeTower escapeTower;//逃逸塔
public OrbitalModule getOrbitalModule() {return orbitalModule;}
public void setOrbitalModule(OrbitalModule orbitalModule) {this.orbitalModule = orbitalModule;}
public Engine getEngine() {return engine;}
public void setEngine(Engine engine) {this.engine = engine;}
public EscapeTower getEscapeTower() {return escapeTower;}
public void setEscapeTower(EscapeTower escapeTower) {this.escapeTower = escapeTower;}
} class OrbitalModule{
private String name;
public OrbitalModule(String name) {super();this.name = name;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
class Engine{
private String name;
public Engine(String name) {super();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) {super();this.name = name;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
package cn.taosir.design.create.builders;
public interface AirShipBuilder {
    Engine builderEngine();
    OrbitalModule builderOrbitalModule();
    EscapeTower builderEscapeTower();
}
package cn.taosir.design.create.builders;
public interface AirShipDirector {
    /**
     * 组装飞船对象
     * @return
     */
    AirShip directAirShip();
}
package cn.taosir.design.create.builders;
public class TaoSirAirShipBuilder implements AirShipBuilder{
    @Override
    public Engine builderEngine() {
        System.out.println("构建发动机...");
        return new Engine("发动机");
    }
    @Override
    public OrbitalModule builderOrbitalModule() {
        System.out.println("构建轨道舱...");
        return new OrbitalModule("轨道舱");
    }
    @Override
    public EscapeTower builderEscapeTower() {
        System.out.println("构建逃逸塔...");
        return new EscapeTower("逃逸塔");
    }
}
package cn.taosir.design.create.builders;
public class TaoSirAirShipDirector implements AirShipDirector{
    private AirShipBuilder builder;
    public TaoSirAirShipDirector(AirShipBuilder builder) {
        this.builder=builder;
    }
    @Override
    public AirShip directAirShip() {
        Engine e=builder.builderEngine();
        OrbitalModule o=builder.builderOrbitalModule();
        EscapeTower et=builder.builderEscapeTower();
        //装配飞船对象
        AirShip ship=new AirShip();
        ship.setEngine(e);
        ship.setEscapeTower(et);
        ship.setOrbitalModule(o);
        return ship;
    }
}
package cn.taosir.design.create.builders;
public class Client {
    public static void main(String[] args) {
        AirShipDirector director=new TaoSirAirShipDirector(new TaoSirAirShipBuilder());
        AirShip ship = director.directAirShip();
        System.out.println(ship.getEngine());
    }
}

开发中的应用场景
StringBuilder类的append方法
SQL中的PreparedStatement
JDOM中,DomBuilder、SAXBuilder
GOF23设计模式之建造者模式的更多相关文章
- 【GOF23设计模式】建造者模式
		来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ... 
- GOF23设计模式之建造者模式(builder)
		一.建造者模式概述 建造者模式的本质: 1.分离了对象子组件的单独构造(由Builder负责)和装配(由Director负责).从而可以构造出复杂的对象.这个模式适用于:某个对象的过程复杂的情况下使用 ... 
- C#设计模式之四建造者模式(Builder Pattern)【创建型】
		一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ... 
- Java设计模式之建造者模式(Builder)
		前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ... 
- C#设计模式(5)——建造者模式(Builder Pattern)
		一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象, ... 
- C++设计模式之建造者模式(三)
		4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ... 
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
		原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ... 
- 折腾Java设计模式之建造者模式
		博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ... 
- Java 设计模式之建造者模式(四)
		原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ... 
随机推荐
- iOS 8 UI布局 AutoLayout及SizeClass(二)
			一.新特性Size Class介绍 随着iOS8系统的公布,一个全新的页面UI布局概念出现,这个新特性将颠覆包含iOS7及之前版本号的UI布局方式,这个新特性就是Size Class. Size Cl ... 
- Selenium  API 介绍
			Selenium API 介绍 我们先前学习过元素定位,大家不知道学习得怎么样了,当你学会元素定位之后就能够跟着我的脚步学习本节Selenium 经常使用的API 介绍 Seleium 为什么能模拟人 ... 
- 《游戏脚本的设计与开发》-(RPG部分)3.8 通过脚本来自由控制游戏(一)
			注意:本系列教程为长篇连载无底洞.半路杀进来的朋友,假设看不懂的话.请从第一章開始看起.文章文件夹请点击以下链接. http://blog.csdn.net/lufy_legend/article/d ... 
- VS2013+ffmpeg开发环境搭建-->【转】
			本文转载自:http://blog.csdn.net/qq_28425595/article/details/51488869 版权声明:本文为博主原创文章,未经博主允许不得转载. 今天整理资料时,发 ... 
- CodeForces 596A
			Description After making bad dives into swimming pools, Wilbur wants to build a swimming pool in the ... 
- 框架:Rureka
			ylbtech-框架:Rureka Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.S ... 
- mvc中Html.AntiForgeryToken的作用和用法
			参考:http://blog.csdn.net/cpytiger/article/details/8781457 
- arttemplate.js原生写法案例
			<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ... 
- (转载)Activity-数据状态的保存
			由于手机是便捷式移动设备,掌握在用户的手中,它的展示方向我们是无法预知的,具有不确定性.平时我们拿着手机多数为竖屏,但有时候我们感觉累了也会躺着去使用手机,那么这时手机屏幕的展示方向可能已经被用户切换 ... 
- Sublime Text3 插件记录
			插件官网 其他插件安装之前,先安装 Package Control: 快捷键Ctrl+`或View > Show Console打开控制台. 输入以下 Python 代码,回车. import ... 
