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 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...
随机推荐
- POJ 1279
发现好多半平面交用N^2的增量法都能过诶... #include <iostream> #include <cstdio> #include <cstring> # ...
- 自己定义UISlider的样式和滑块
//自己定义UISlider的样式和滑块 //轨道图片 UIImage *stetchLeftTrack = [UIImage imageNamed:@"thick"]; UIIm ...
- 问题: Unsupported major.minor version 51.0
Unsupported major.minor version 51.0 问题原因:外部jar包使用jdk1.7(jdk7)编译,而使用此jar包的工程jdk版本为jdk1.6(jdk6),算是版本不 ...
- 监控sql运行时剩余时间
--监控sql执行时剩余时间 你知道正在执行的sql大概须要多长时间么? 你知道正在执行的sql大概完毕了百分之几么? 你知道正在执行的sql大概还要多长时间完毕么? V$SESSION_LONGOP ...
- Android笔记之网络状态推断
1.首先当然得在 manifest 中加入检查网络状态的权限: <uses-permission android:name="android.permission.ACCESS_NET ...
- luogu1967 货车运输 最大瓶颈生成树
题目大意 给出一张图,给出q对点,求这两个点间权值最小边最大的路径,输出这个最小边权. 题解 我们先一条一条边建图.当建立的边使得图中形成环时,因为环中的每个节点只考虑是否连通和瓶颈大小,要想互相连通 ...
- camera table表编译
mmm -j8 vendor/mediatek/proprietary/hardware/mtkcam/v1/common/paramsmgr/ 2>&1 | tee ft.lib.lo ...
- open Command window here
http://www.sevenforums.com/tutorials/134831-open-command-window-here-add-remove.html 按照教程里面,下载一个脚本 需 ...
- Hdu-6249 2017CCPC-Final G.Alice’s Stamps 动态规划
题面 题意:给你n个集合,每个集合有L到R这些种类的邮票,让你选择其中的K个集合,使得最后选择的邮票种类尽可能多,N,L,R都<=2000 题解:容易乱想到网络流,可是再细想一下就会发现处理不了 ...
- 适配器模式(adapter)C++实现
意图:将一个类的接口转换成客户希望的另一个接口. 适用性:1.你想使用一个已存在的类,而它的接口不符合你的需求. 2.你想创建一个可以复用的类,该类可以与其它不相关的类或不可预见的类协同工作. 类适配 ...