组件很多,装配顺序不定

本质:

1,分离了对象子组件的单独构造(Builder负责)和装配(Director负责),从而可以构造出复杂的对象,这个模式适用于某个对象的构建过程复杂的情况下使用

2,实现了构建和装配的解耦

/**建造者用来得到各个组件
 * @author 小帆敲代码
 *
 */
public interface AirshipBuilder {
  public Engine getngine();//可用工厂或者单例模式得到对应的组件
  public EscapeTower getEscapeTower();
  public ObitalMoudle getObitalMoudle();
}

public class FAirshipBuilder implements AirshipBuilder{
 @Override
 public Engine getngine() {
  System.out.println("建造发动机");
  return new Engine("F牌发动机");
 }
 @Override
 public EscapeTower getEscapeTower() {
  System.out.println("建造逃生塔");
  return new EscapeTower("F牌");
 }
 @Override
 public ObitalMoudle getObitalMoudle() {
  System.out.println("建造轨道舱");
  return new ObitalMoudle("F牌轨道舱");
 }
}
/**
 * 装配组件
 * @author 小帆敲代码
 *
 */
public interface AirshipDirector {
 //装配
  public Airship directAirship();
}
public class FAirshipDirector implements AirshipDirector{
 private AirshipBuilder builder;
 public FAirshipDirector(AirshipBuilder builder) {
  this.builder = builder;
 }
 @Override
 public Airship directAirship() {
  Engine e=builder.getngine();
  EscapeTower et=builder.getEscapeTower();
  ObitalMoudle o=builder.getObitalMoudle();
  
  //装配
  Airship airship=new Airship();
  airship.setEngine(e);
  airship.setEscapeTower(et);
  airship.setObtalMoudle(o);
  return airship;
 }
}
public class Airship {
  private Engine engine;//发动机
  private ObitalMoudle obtalMoudle;//轨道舱
  private EscapeTower escapeTower;//逃生塔
  
  public void lauch() {
   System.out.println("发射!!!");
  }
  
  public Engine getEngine() {
   return engine;
  }
  public void setEngine(Engine engine) {
   this.engine = engine;
  }
  public ObitalMoudle getObtalMoudle() {
   return obtalMoudle;
  }
  public void setObtalMoudle(ObitalMoudle obtalMoudle) {
   this.obtalMoudle = obtalMoudle;
  }
  public EscapeTower getEscapeTower() {
   return escapeTower;
  }
  public void setEscapeTower(EscapeTower escapeTower) {
   this.escapeTower = escapeTower;
  }
  
  
}
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 ObitalMoudle{
 private String name;
 public ObitalMoudle(String name) {
  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) {
  this.name = name;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
}
public class Client {
 public static void main(String[] args) {
   FAirshipDirector f=new FAirshipDirector(new FAirshipBuilder());
   Airship airship=f.directAirship();
   
   System.out.println(airship.getEngine().getName());
   
   airship.lauch();
 }
}

设计模式之GOF23建造者模式的更多相关文章

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

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

  2. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

  3. 设计模式学习之建造者模式(Builder,创建型模式)(6)

    假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人帮我们造房子 第一步: 新建一个房子类House,里面有房子该有的属性,我们去找房子建造者接口HouseBuilder,我们要建 ...

  4. PHP设计模式之:建造者模式

    建造者模式: 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式; 目的: 消除其他对象复杂的创建过程 结构图: 优点: 建造者模式可以很好的将一个对象的实现与相关的“业 ...

  5. java常用设计模式五:建造者模式

    1.定义 是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 产品类:一般是一个较为复杂的对象,也就是说创建对象的 ...

  6. Java设计模式学习记录-建造者模式

    前言 今天周末,有小雨,正好也不用出门了,那就在家学习吧,经过了两周的面试,拿到了几个offer,但是都不是自己很想去的那种,要么就是几个人的初创小公司,要么就是开发企业内部系统的这种传统开发,感觉这 ...

  7. java设计模式-----6、建造者模式

    Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类 ...

  8. IOS设计模式浅析之建造者模式(Builder)

    定义 "将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现". 最初的定义出现于<设计模式>(Addison-Wesley,1994). 看这个概 ...

  9. Java设计模式14:建造者模式

    什么是建造者模式 发现很多框架的源码使用了建造者模式,看了一下觉得挺实用的,就写篇文章学习一下,顺便分享给大家. 建造者模式是什么呢?用一句话概括就是建造者模式的目的是为了分离对象的属性与创建过程,是 ...

随机推荐

  1. Treasure Island DFS +存图

    All of us love treasures, right? That's why young Vasya is heading for a Treasure Island. Treasure I ...

  2. 2.react-插件

    PC: antd(蚂蚁金服)https://ant.design/index-cn 移动: mobile-antd(蚂蚁金服)https://mobile.ant.design =========== ...

  3. v&n赛 内存取证题解(已更新)

    题目是一个raw的镜像文件 用volatility搜索一下进程 有正常的notepad,msprint,还有dumpit和truecrypt volatility -f mem.raw --profi ...

  4. MVC-过滤器-权限认证

    过滤器主要基于特性,aop来实现对MVC管道中插入其他处理逻辑.比如,访问网站,需要检查是否已经登陆,若没登陆跳入登陆界面. 样例: 方法注册 执行效果 当不符合认证时: 上面是方法注册特性.还有类注 ...

  5. JWT验证机制【Python版Flask或自己写的后端可以用】【刘新宇】

    JWT Json Web Token(JWT) JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在两个组织之间传递安全可靠的信息. 官方定义:JSON Web T ...

  6. Python之小型信息管理系统

    #Author:msq #Time:2019/11/16 import re import os filename = "person.txt" def menu(): #输出菜单 ...

  7. QT QLabel内容太长时候使用省略号

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xiezhongyuan07/articl ...

  8. B/S和C/S架构的区别

    一.B/S架构 什么是B/S模式 B/S模式,即浏览器/服务器模式,是一种从传统的二层CS模式发展起来的新的网络结构模式,其本质是三层结构C/S模式.B/S网络结构模式是基于Intranet的需求而出 ...

  9. 由JS数组去重说起

    一.问题描述: var array=[1,45,3,1,4,67,45],请编写一个函数reDup来去掉其中的重复项,即 reDup(array); console.log(array);//[1,4 ...

  10. OEL6 /boot分区删除恢复

    对linux的应用有一段时间来,虽然谈不上精通,但日常应用maintenance还是没问题的,昨天自己故意把/boot分区直接format了,今天来尝试恢复,看看自己对linux启动方面的认识如何,总 ...