• 场景:

– 我们要建造一个复杂的产品。比如:神州飞船,Iphone。这个复杂的产品的创建。有这样

一个问题需要处理:

• 装配这些子组件是不是有个步骤问题?

– 实际开发中,我们所需要的对象构建时,也非常复杂,有很多步骤需要处理时。

• 建造模式的本质:

– 分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。 从而可以构

造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。

– 由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;

相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配

算法的解耦,实现了更好的复用。

• 开发中应用场景:

– StringBuilder类的append方法

– SQL中的PreparedStatement

– JDOM中,DomBuilder、SAXBuilder

举例:构建 白纸牌宇宙飞船

//白纸牌宇宙飞船

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) {
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) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}

}

//逃逸塔类

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;
}

}

//搭建宇宙飞船构造接口

public interface AirShipBuilder {

Engine builderEngine();

OrbitalModule builderOrbitalModule();

EscapeTower builderEscapeTower();

}

//搭建宇宙飞船接口实现类

public class SxtAirShipBuilder implements AirShipBuilder {

@Override

public Engine builderEngine() {

System.out.println("构建发动机!");

return new Engine("白纸牌发动机!");

}

@Override
public EscapeTower builderEscapeTower() {
System.out.println("构建逃逸塔");
return new EscapeTower("白纸牌逃逸塔");
} @Override
public OrbitalModule builderOrbitalModule() {
System.out.println("构建轨道舱");
return new OrbitalModule("白纸牌轨道舱");
}

}

//组装飞船接口

public interface AirShipDirector {

AirShip directAirShip();

}

//组装飞船对象接口实现类

public class SxtAirshipDirector implements AirShipDirector {

private AirShipBuilder builder;

public SxtAirshipDirector(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;
}

}

//测试

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();
}

}

GOF 23种设计摩搜-建造者模式的更多相关文章

  1. php 23种设计模型 - 抽象工厂模式

    抽象工厂模式(AbstractFactory) 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创 ...

  2. php 23种设计模型 - 中介者模式

    中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行 ...

  3. php 23种设计模型 - 享元模式

    享元模式 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. ...

  4. 实践GoF的23种设计模式:装饰者模式

    摘要:装饰者模式通过组合的方式,提供了能够动态地给对象/模块扩展新功能的能力.理论上,只要没有限制,它可以一直把功能叠加下去,具有很高的灵活性. 本文分享自华为云社区<[Go实现]实践GoF的2 ...

  5. GOF 23种设计模式目录

    经典的gof 23种设计模式,目录大纲查看. 1. Singleton(单例模式) 保证一个类只有一个实例,并提供访问它的全局访问点. 2. Abstract Factory(抽象工厂模式) 提供一个 ...

  6. java23种设计模式——五、建造者模式

    源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...

  7. php 23种设计模型 - 建造者模式

    建造者模式(Builder) 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 一个 Bu ...

  8. GoF的23种设计模式之创建型模式的特点和分类

    创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”.这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成.就像我们去商场购买商品时, ...

  9. GoF的23种设计模式之行为型模式的特点和分类(2)

    行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配. 行为型模式分为类行为模式和对象行为模式,前者采用继 ...

随机推荐

  1. hql的笔记

    删除方法 getSession().delete(arg0); 今天写这个删除语句的时候运用这delete()这个方法,根据id删除记录,hql和普通的sql还是有区别的, 普通的sql封装好了del ...

  2. winServer08上安装SQL时提示“必须使用管理角色安装”或配置microsoft.net framework 3.5

    server 2008安装vs2008后报错,如图: 解决方法: 控制面板—>程序—>打开或关闭Windows功能—>进入服务器管理器选择功能—>添加功能 然后勾选.NET F ...

  3. python学习-- 两种方式查看自己的Django版本

    [第一种方式] Windows系统下 按住Windows按键 + R 进入搜索:搜索CMD进入控制台:输入Python进入Python解释器 Linux系统下 直接使用终端调用Python解释器 接下 ...

  4. c++ 字符处理

    C++字符处理首选使用 string ,理由是string类型有很多简单易用的函数,不像char, char[], char* 等这些字符这么复杂. 如何用printf函数输出百分号? 打两个%%.. ...

  5. linux下 export只能设定临时变量

    今天在调用ABBYY API的时候,需要传递APPID和APPPASSWD给系统环境才能够执行相应的python调用代码. 设置之后,因为写代码自己关掉了terminal,后面直接运行报错,访问权限不 ...

  6. List容器——LinkedList及常用API,实现栈和队列

    LinkedList及常用API ①   LinkedList----链表 ②   LinkedList类扩展AbstractSequentialList并实现List接口 ③   LinkedLis ...

  7. PHP经典面试题目汇总(上篇)

    1.双引号和单引号的区别 双引号解释变量,单引号不解释变量 双引号里插入单引号,其中单引号里如果有变量的话,变量解释 双引号的变量名后面必须要有一个非数字.字母.下划线的特殊字符,或者用{}讲变量括起 ...

  8. div固定在屏幕底部

    项目中需要实现div一直显示在屏幕的底部,不管页面有多长或者多端都需要满足. 在网上找的用js实现的,移动时会闪动,效果不是特别好.也可能是没找到好的. 相比js,我更希望使用css实现 1 < ...

  9. Multiset ------ 多重集合

    Multiset的中文名是多重集合,其实就是集合的扩展版.唯一的不同是集合中一个值只能出现一次,而多重集合中一个值可以出现多次. 粗略看了看MSDN,在STL中,multiset和set的成员函数声明 ...

  10. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...