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 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...
随机推荐
- Linux GDB程序调试工具使用简单介绍
GDB概述 GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软件,你会发现GDB这个调试 ...
- eclipse配置默认的jdk
1.window-preferences-java-Installed JREs-Add-Standard VM-[添加jre6或jre7的路径]
- linux下图片转换工具[【转】
本文转载自:https://linux.cn/article-8014-1.html 计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务的方法.这篇教程里,我们会使用 Linux 命令行 ...
- 院校-美国:麻省理工学院(MIT)
ylbtech-院校-美国:麻省理工学院(MIT) 麻省理工学院(Massachusetts Institute of Technology),简称麻省理工(MIT),坐落于美国马萨诸塞州波士顿都市区 ...
- SQL Server 2005外围应用配置器
在SQL Server Configuration Manager中,重启“SQL Server(SQL2005)”服务.
- ELK+kafka日志收集
一.服务器信息 版本 部署服务器 用途 备注 JDK jdk1.8.0_102 使用ELK5的服务器 Logstash 5.1.1 安装Tomcat的服务器 发送日志 Kafka降插件版本 Log ...
- Endnote导入共享数据
Endnote导入共享数据 Endnote是我们经常使用的参考文献管理工具.但是,在云计算还不是很普及的今天,往往每台电脑上都有自己的endnote数据库.这样,换了电脑,要使用同样的参考文献数据时, ...
- python - 中文打印报错SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no encoding declared。
python中默认的编码格式是ASCII格式, 所以在没修改编码格式时无法正确打印汉字. 解决办法: 在以后的每一个需要显示汉字的python文件中, 可以采用如下方法在 #!/usr/bin/pyt ...
- 3、Collection接口中的功能概述
package cn.itcast_01; import java.util.ArrayList; import java.util.Collection; /** * 集合: * 由于我们使用的是面 ...
- 免费获取Bootstrap模板的方法
Bootstrap是Twitter推出的一个开源的用于前端开发的工具包,其中中包含了丰富的Web组件,根据这些组件,可以快速的搭建一个漂亮.功能完备的网站. 最近通过了Bootstrap中文网学习了其 ...