【GOF23设计模式】建造者模式
来源:http://www.bjsxt.com/
一、【GOF23设计模式】建造者模式详解类图关系
建造飞船
package com.test.Builder;
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;
}
}
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 com.test.Builder;
public interface AirShipBuilder {
OrbitalModule buildOrbitalModule();
Engine builderEngine();
EscapeTower builderEscapeTower();
}
组装接口
package com.test.Builder;
public interface AirShipDirector {
/**
* 组装飞船对象
*/
AirShip directAirShip();
}
构造实现类
package com.test.Builder;
/**
* StringBuilder,以后学习XML解析中,JDOM库中的类:DomBuilder,SaxBuilder
*/
public class SxtAirShipBuilder implements AirShipBuilder{ @Override
public OrbitalModule buildOrbitalModule() {
System.out.println("构建sxt轨道舱");
return new OrbitalModule("sxt轨道舱");
} @Override
public Engine builderEngine() {
System.out.println("构建sxt发动机");
return new Engine("sxt发动机");
} @Override
public EscapeTower builderEscapeTower() {
System.out.println("构建sxt逃逸塔");
return new EscapeTower("sxt逃逸塔");
}
}
组装实现类
package com.test.Builder;
public class SxtAirShipDirector implements AirShipDirector{
private AirShipBuilder builder;
public SxtAirShipDirector(AirShipBuilder builder) {
super();
this.builder = builder;
}
@Override
public AirShip directAirShip() {
OrbitalModule o = builder.buildOrbitalModule();
Engine e = builder.builderEngine();
EscapeTower et = builder.builderEscapeTower();
AirShip ship = new AirShip();
ship.setOrbitalModule(o);
ship.setEngine(e);
ship.setEscapeTower(et);
return ship;
}
}
package com.test.Builder;
public class Client {
public static void main(String[] args) {
AirShipDirector director = new SxtAirShipDirector(new SxtAirShipBuilder());
AirShip ship = director.directAirShip();
System.out.println(ship.getEngine().getName());
ship.launch();
}
}
【GOF23设计模式】建造者模式的更多相关文章
- 3.java设计模式-建造者模式
Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...
- 设计模式—建造者模式(Builder)
title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...
- C#设计模式-建造者模式
在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成. 例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由C ...
- [Head First设计模式]山西面馆中的设计模式——建造者模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感 ...
- 说说设计模式~建造者模式(Builder)
返回目录 建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我 ...
- C++设计模式——建造者模式
建造者模式 在GOF的<设计模式 可复用面向对象软件的基础>中是这样说的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 这句话,似懂非懂的.一个复杂对象的创建 ...
- Python设计模式——建造者模式
需求,画人物,要求画一个人的头,左手,右手,左脚,右脚和身体,画一个瘦子,一个胖子 不使用设计模式 #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' ...
- 我的Java设计模式-建造者模式
在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...
- 设计模式 | 建造者模式/生成器模式(builder)
定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 结构:(书中图,侵删) 一个产品类 一个指定产品各个部件的抽象创建接口 若干个实现了各个部件的具体实现的创建类 一个 ...
- java设计模式——建造者模式
一. 定义与类型 定义:将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 用户只需制定需要建造的类型就可以得到它们,建造过程以及细节不需要知道 类型:创建型 建造者模式与工厂模 ...
随机推荐
- 用 Wireshark 图解:TCP 三次握手
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “snow warn throughout the winter” 一.什么是 Wireshar ...
- 说说lambda表达式与表达式树(未完)
Lambda表达式可以转换成为代码(委托)或者数据(表达式树).若将其赋值给委托,则Lambda表达式将转换为IL代码:如果赋值给 Expression<TDelegate>,则构造出一颗 ...
- php 连接redis,并登录验证
环境: centos7 上安装了redis, 同时安装了php的redis扩展 yum install redis yum install php-pecl-redis redis服务端设置了登录密码 ...
- HTTP 详解一 -- 转
HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...
- seajs中spm压缩工具使用
seajs是个好东西,用起来很方便,但是她的压缩工具spm确不被网友看好,因为使用起来很麻烦,捯饬了一天多,终于勉强能压缩了,这里就简单记录一下. 按照地址:http://www.zhangxinxu ...
- Python 之 lambda 函数
Python 支持一种单行匿名函数,这种函数称为 lambda,它最初借鉴自 Lisp. >>> add = lambda x, y: x +y >>> add(3 ...
- 【解决方案】VS2013外部工具中添加ildasm.exe
VS2013安装在Win8.1的操作系统中,开始屏幕中找不到ildasm.exe没有显示,于是下面提供了一种方法将ildasm.exe工具添加到VS2013外部工具中,并将反编译的代码输出到VS201 ...
- 简单学ES6 - class
前言 随着ES6标准的定稿,众多的特性也趋于稳定,各大浏览器也在逐步实现这些特性,那么对ES6有更多的了解就无可厚非了. 准备 在学习ES6之前,我们需要有一个环境来测试ES6代码.在这里我推荐使用n ...
- MongoDB的学习--文档的插入、删除和更新
最近在看<MongoDB权威指南>,写博客记录一下相关内容~~ 关于安装之类的最基本的就不多说了,从基本操作增删改查开始. MongoDB官网地址:http://www.mongodb.o ...
- [Node.js] Cluster,把多核用起来
原文地址: http://www.moye.me/?p=496 引子 众所周知,虽然Node的底层有一个IO线程池,但其应用层默认是单线程运行的,对于多核CPU环境来说,是一种资源的浪费. 所幸Nod ...