组件很多,装配顺序不定

本质:

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. notepad++批量每行加字符

    移动光标到头 选择正则 输入^ 下面输入需要加的文本. 点替换

  2. python爬虫实例,一小时上手爬取淘宝评论(附代码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 1 明确目的 通过访问天猫的网站,先搜索对应的商品,然后爬取它的评论数据. ...

  3. 【转】动态规划之最长公共子序列(LCS)

    [原文链接]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经典的面试题目,因为它的解法是典型的二维动态规划,大部分比较困难的字符串问题都和这个问题一个套 ...

  4. [Abp vNext 入坑分享] - 前言

    一·背景 Abp vnext是 ABP 框架作者所发起一个完全基于 ASP .NET Core框架,截至2020年4月份已经升级到2.5.0版本,根据经验2.0版本以后可以放心的使用在生产环境.类似a ...

  5. 005.Ansible de palybook简单使用

    一 Ansible Playbook简介 ansbile-playbook是一系列ansible命令的集合,利用yaml 语言编写.playbook命令根据自上而下的顺序依次执行.同时,playboo ...

  6. css3变形

    CSS3变形--旋转 rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点 ...

  7. MySQL数据库缓存操作

    安装: 启动的话: -d:以后台的方式进行: -l:选择监听指定的ip服务地址:-m:给他分配多大的内存:-p:端口号默认的端口为11211的服务端口: 另一个: 安装:telnet 这个可以用来测试 ...

  8. 如何使用Markdown 编写文档

    Markdown 是一种轻量级标记语言,用来编写文本文档,一般后缀名为.md.该语言在 2004 由约翰·格鲁伯(John Gruber)创建. 由于Markdown 语法简单,易读易写,变得越来越通 ...

  9. Fedora 21下lingo14配置

    Install lingo14 during Fedora 21 The first step:Download lingo14Download address:http://www.lindo.co ...

  10. Spring框架中文件目录遍历漏洞 Directory traversal in Spring framework

    官方给出的描述是Spring框架中报告了一个与静态资源处理相关的目录遍历漏洞.某些URL在使用前未正确加密,使得攻击者能够获取文件系统上的任何文件,这些文件也可用于运行SpringWeb应用程序的进程 ...