创建者模式:

分离对象子组件的单独构造(由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. URL参数转换对象

    var parseQueryString = function (url) { var reg_url = /^[^\?]+\?([\w\W]+)$/, reg_para = /([^&=]+ ...

  2. oracl 、mysql在线查看文档

    Oracle .mysql在线开发文档: http://www.runoob.com/sql/sql-union.html

  3. javaweb项目打成war包

    进入项目文件 jar -cvf newsisAP.war *

  4. MVC日期和其它字符串格式化

    -- (月份位置不是03) string.Format("{0:D}",System.DateTime.Now) 结果为:2009年3月20日 : :: -- : -- :: st ...

  5. exception PLS-00215: String length constraints must be in range (1 .. 32767)

      exception PLS-00215: String length constraints must be in range (1 .. 32767) CreationTime--2018年8月 ...

  6. 使用JDK自带的JAXB进行类和xml的互转

    Classroom.java public class Classroom { private int id; private String name; private int grade; publ ...

  7. urlparse模块(专门用来解析URL格式)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #urlparse模块(专门用来解析URL格式) #URL格式: #protocol ://hostname[ ...

  8. CentOS 6.4安装配置LAMP服务器

    CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL) 作者: 字体:[增加 减小] 类型:转载 这篇文章主要介绍了CentOS 6.4安装配置LAMP服务器(Apache+ ...

  9. ListView中Button事件

    为了解决ListView中Item里的Button独立事件响应,能够採用下面方法: 在BaseAdapter的getview里加入加粗代码: <span style="font-siz ...

  10. 各大主流.Net的IOC框架

    Autofac下载地址:http://code.google.com/p/autofac/ Castle Windsor下载地址:http://sourceforge.net/projects/cas ...