设计模式(五)Builder Pattern建造者模式
在我们日常生活中,如构建一个飞船,一个手机,一栋建筑,都会有非常复杂的组装,这时候应该用到建造者模式
以建造一个飞船为例
案例:造小页飞船
1.飞船各部分元件
package com.littlepage.BuilderPattern;
public interface AirShipBuilder {
Engine builderEngine();
OrbitalModule builderOrbitalModule();
Escape builderEscape();
}
2.飞船实体用来组装
package com.littlepage.BuilderPattern;
public class AirShip {
private OrbitalModule orbitalModule;
private Engine engine;
private Escape escape;
public void lauch(){
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 Escape getEscape() {
return escape;
}
public void setEscape(Escape escape) {
this.escape = escape;
}
}
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 Escape{
private String name;
public Escape(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3.创造方法的接口
package com.littlepage.BuilderPattern;
/*
*组装飞船对象
*/
public interface AirShipDirector {
AirShip createAirship();
}
4.实现组件(小页飞船组件)
package com.littlepage.BuilderPattern;
public class LittlePageShipBuilder implements AirShipBuilder{
@Override
public Engine builderEngine() {
System.out.println("页牌发动机");
return new Engine("页牌发动机");
}
@Override
public OrbitalModule builderOrbitalModule() {
System.out.println("页牌逃逸塔");
return new OrbitalModule("页牌逃逸塔");
}
@Override
public Escape builderEscape() {
System.out.println("页牌轨道舱");
return new Escape("页牌轨道舱");
}
}
5.实体实现装配
package com.littlepage.BuilderPattern;
public class LittlePageAirshipDirector implements AirShipDirector{
private AirShipBuilder builder;
public LittlePageAirshipDirector(AirShipBuilder builder) {
this.builder = builder;
}
@Override
public AirShip createAirship() {
Engine e=builder.builderEngine();
OrbitalModule om=builder.builderOrbitalModule();
Escape et=builder.builderEscape();
AirShip ship=new AirShip();
ship.setEngine(e);
ship.setOrbitalModule(om);
ship.setEscape(et);
return ship;
}
}
6.客户端的串接(测试)
package com.littlepage.BuilderPattern;
public class Client {
public static void main(String[] args) {
AirShipDirector dir=new LittlePageAirshipDirector(new LittlePageShipBuilder());
AirShip air=dir.createAirship();
System.out.println(air.getEngine());
air.lauch();
}
}
UML结构图

设计模式(五)Builder Pattern建造者模式的更多相关文章
- Java设计模式(3)建造者模式(Builder模式)
Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构 ...
- 设计模式(4)建造者模式/生成器模式(Builder)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...
- 设计模式(四)建造者模式 Builder
Builder: <Effective Java> 第2条:遇到多个构造器参数时要考虑用构建器. 建造者模式(Builder Pattern),也称生成器模式,定义如下: 将一个复杂对象的 ...
- 设计模式实战系列之@Builder和建造者模式
前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...
- 【转】设计模式(三)建造者模式Builder(创建型)
(http://blog.csdn.net/hguisu/article/details/7518060) 1. 概述 在软件开发的过程中,当遇到一个"复杂的对象"的创建工作,该对 ...
- 【设计模式 - 3】之建造者模式(Builder)
1 模式简介 建造者模式也叫生成器模式,和抽象工厂模式相似,也是一种构建复杂对象的模式. 建造者模式中的角色分类: 抽象建造者Builder:接口类型,用于规范各个产品的组成部分: 具体建造 ...
- 设计模式(三)建造者模式Builder(创建型)
1. 概述 在软件开发的过程中,当遇到一个“复杂的对象”的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定 ...
- 设计模式之九:建造者模式(Builder)
建造者模式: 将一个复杂对象的建造过程和它的表示分离开来,这样同样的建造过程能够创建不同的表示. Separate the construction of a complex object from ...
- 设计模式课程 设计模式精讲 7-2 建造者模式Coding
1 代码演练 1.1 建造者模式演练 1.2 静态内部类演练建造者模式(链式调用) 1 代码演练 1.1 建造者模式演练 需求: 根据讲师提供的课程名称,课程ppt,课程视频,课程手记,课程问答 制作 ...
随机推荐
- MyEclipse配置默认自带的XML代码格式化
1.XML中的注释保持原样,不格式化为一行(Join lInes)内
- K8S学习笔记之Kubernetes核心概念
0x00 Kubernetes简介 Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践. K8S在Doc ...
- Python求最大可能
也称为求一个集合的所有的子集 采用二进制方法: def PowerSetsBinary(items): #generate all combination of N items N = len(ite ...
- JDK常用命令(三)jmap
jmap jmap,Java Memory Map.主要用于打印指定Java进程(或核心文件.远程调试服务器)的共享对象内存映射或堆内存细节. jmap命令可以获得运行中的jvm的堆的快照,从而可以离 ...
- python简说(二十六)异常
# try:# res = 1 / 0# except ZeroDivisionError as e:# print('出错啦,除数不能为0',e) # l = list()# l.append(1) ...
- bzoj 1014 火星人prefix - 链表 - 分块
Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 ...
- 【python37--面向对象】
一. self是什么 绑定方法,self就是实例对象的唯一标志 >>> class Ball: def setName(self,name): self.name = name de ...
- gcc,make,cmake
1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C.C++.Objective-C.Fortran.Java等等 ...
- Testng测试报告
执行完测试用例之后,会在项目的test-output(默认目录)下生成测试报告
- topcoder srm 445 div1
problem1 link 这个的结论是只需要考虑坐标是整数或者是整数.5,比如(2.5,3),(4,3.5),(1.5,4.5)这样的时候.这个详细证明起来应该挺麻烦的.这里有一些讨论. probl ...