创建者模式:

分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式。

类图:

Builder 抽象建造者接口,规范各个组成部分的构建。

  ConcreteBuilder 具体建造者角色,实现组成部分的构建,并提供示例。

  Product 产品角色,创建返回的对象。

  Director 导演者角色,负责创建以及使用。

优点:

由于实现了构建和装配的解耦。不同的构建器,相同的装配也可以做成不同的对象,相同的构建器,不同的装配顺序也可以生产成不同的对象。也就是实现了构造算法和装配算法的解耦,实现了更好的复用。

应用场景:

StringBuilder类的append方法。

SQL中的PreparedStatement

JDOM中,DomBuilder SAXBuilder

创建者模式Demo

 package builder.domain;

 /**
* 宇宙飞船
*
*/
public class AirShip {
private OrbitalModule orbitalModule; //轨道舱
private Engine engine; //发动机
private EscapeTower escapeTower; //逃逸塔 public void launch(){
System.out.println("发射!");
} 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;
}
} package builder.domain; public 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;
}
} package builder.domain; public class EscapeTower {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public EscapeTower(String name) {
super();
this.name = name;
}
} package builder.domain; public class OrbitalModule {
private String name; public OrbitalModule(String name)
{
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} } package builder.service; import builder.domain.Engine;
import builder.domain.EscapeTower;
import builder.domain.OrbitalModule; public interface IAirShipBuilder {
Engine builderEngine();
OrbitalModule builderOrbitalModule();
EscapeTower builderEscapeTower();
} package builder.service; import builder.domain.Engine;
import builder.domain.EscapeTower;
import builder.domain.OrbitalModule; public class AirShipBuilderImpl implements IAirShipBuilder {
//StringBuilder, 以后学习XML解析中,JDOM库中的类:DomBuilder,SaxBuilder
@Override
public Engine builderEngine() {
// TODO Auto-generated method stub
System.out.println("构建发动机!");
return new Engine("发动机!");
} @Override
public OrbitalModule builderOrbitalModule() {
// TODO Auto-generated method stub
System.out.println("构建轨道舱");
return new OrbitalModule("轨道舱");
} @Override
public EscapeTower builderEscapeTower() {
// TODO Auto-generated method stub
System.out.println("构建逃逸塔");
return new EscapeTower("逃逸塔");
} } package builder; import builder.domain.AirShip; public interface IAirShipDirector {
/**
* 组装飞船对象
* @return
*/
AirShip directAirShip();
} package builder; import builder.domain.AirShip;
import builder.domain.Engine;
import builder.domain.EscapeTower;
import builder.domain.OrbitalModule;
import builder.service.IAirShipBuilder; public class AirshipDirectorImpl implements IAirShipDirector {
private IAirShipBuilder builder; public AirshipDirectorImpl(IAirShipBuilder builder) {
this.builder = builder;
} @Override
public AirShip directAirShip() {
// TODO Auto-generated method stub
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 builder; import builder.domain.AirShip;
import builder.service.AirShipBuilderImpl; public class Client { public static void main(String[] args) {
// TODO Auto-generated method stub
IAirShipDirector director = new AirshipDirectorImpl(new AirShipBuilderImpl()); AirShip ship = director.directAirShip(); System.out.println(ship.getEngine().getName()); ship.launch();
} }

创建者模式Builder的更多相关文章

  1. [设计模式] 3 创建者模式 builder

    转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...

  2. 设计模式学习总结(五)创建者模式(Builder)

    创建者模式,主要针对某些产品有类似的生产步骤,且有需要有先后顺序的进行各个部件的生成. 一.示例展示: 通过学习及总结,以下是我完成的创建者模式的示例: 1.创建产品类:Laptop public c ...

  3. 创建者模式-Builder

    创建者模式使用多个简单的对象一步一步构建成一个复杂的对象.它提供了一种创建对象的最佳方式.一个 Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的. 一.类图 创建者 ...

  4. 【设计模式】—— 创建者模式Builder

    前言:[模式总览]——————————by xingoo 模式意图 一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开.使用一个Director类进行对象的创建,Builder规定了这个创建 ...

  5. (Builder)创建者模式

    定义: 建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示. 适用性: 当流程算法可以固定几个步骤,步骤的算法步骤执行顺序固定,且制造的产品可以唯一确定,这时使用创建 ...

  6. Builder创建者模式

    http://www.codeproject.com/Articles/42415/Builder-Design-Pattern In Elizabeth's day care center, the ...

  7. 创建类模式(三):创建者(Builder)

    定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.这使得构件算法和组装方式可以独立应对变化:复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式 ...

  8. C#设计模式之五创建者模式(Builder)【创建型】

    一.引言  今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一个复杂的物品,它主要是由CPU.主板.硬 ...

  9. OOAD(面向对象分析和设计)GRASP之创建者模式(Creator)又称生成器模式学习笔记

    说OOAD是一门玄学,一点都不为过.又或许是因为我之前一直没有很好的建立面向对象的思想,更有可能是因为练得不够多...总之,一直没能很好理解,哪怕把一本叫做<UML和模式应用>的书翻来覆去 ...

随机推荐

  1. [Angular-Scaled web] 2. Architecture sub-modules

    Common models will be a sub models for category and bookmarks. Because they are used everywhere. For ...

  2. 大型开放式网络课程MOOC的一点体会

            2012年,美国的顶尖大学陆续设立网络学习平台,在网上提供免费课程,Coursera.Udacity.edX三大课程提供商的兴起.给很多其它学生提供了系统学习的可能.这就是大型开放式网 ...

  3. ZH奶酪:【阅读笔记】Deep Learning, NLP, and Representations

    中文译文:深度学习.自然语言处理和表征方法 http://blog.jobbole.com/77709/ 英文原文:Deep Learning, NLP, and Representations ht ...

  4. Cocos2d-x Touch事件处理机制

    在Cocos2d-x中提供两种触摸事件处理机制:CCStandardTouchDelegate和CCTargetedTouchDelegate. 一.如何使用 0.默认情况下CCLayer都是没有启动 ...

  5. poj 2135 (基础费用流)

    题意:从1到n再到1,每条边只能走一次,求最短距离. 建图:每条边只能走一次就是流量是1,添加源点与1相连,容量为2,费用为0,n与汇点相连容量为2,费用为0: 求增广路用SPFA最短路求,, #in ...

  6. 使用JSP实现输出(web基础学习笔记二)

    Jsp:Java Server Page 服务器端的Java页面,动态网页技术 jsp注释 显式注释:这种注释客户端是允许看见的;<!--html注释--> 隐式注释:这种注释客户端是看不 ...

  7. 算法笔记_186:历届试题 高僧斗法(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 古时丧葬活动中经常请高僧做法事.仪式结束后,有时会有“高僧斗法”的趣味节目,以舒缓压抑的气氛. 节目大略步骤为:先用粮食(一般是稻米)在地 ...

  8. java程序员认证考试题库

    第一部分 基础知识练习 目标 本章对应于<学生指南>各章的内容分别提供了练习题集,包括: ●  第一章Java入门 ●  第二章数据类型和运算符 ●  第三章流程控制与数组 ●  第四章封 ...

  9. 1z0-052 q209_2

    2: View the Exhibit to examine the output produced by the following query at three different times s ...

  10. javascript ActiveX 获取ip和MAC

    <HTML><HEAD><TITLE>WMI Scripting HTML</TITLE> <META http-equiv=Content-Ty ...