建造者模式

建造者模式适用场景:

  建造一个复杂的对象适用,将构建对象的过程分开,每个类单独构造对象的一部分,最后组装起来,返回我们需要的对象。

下面的例子主要讲解构造一个飞船

Demo: 

//要获得的对象,但是各个组件要拆分开,让对应的类去实现

class AirShip {
  private OrbitaModule orbitaModule;//轨道舱
  private Engine engine; //发动机
  private EscapeTower escapeTower;//逃逸塔
  public OrbitaModule getOrbitaModule() {
    return orbitaModule;
  }
  public void setOrbitaModule(OrbitaModule orbitaModule) {
    this.orbitaModule = orbitaModule;
  }
  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 OrbitaModule{

  private String name;

  public String getName() {

    return name;

  }

  public void setName(String name) {

    this.name = name;

  }

  public OrbitaModule(String name) {

    super();

  this.name = name;

  }

}

class Engine{

  private String name;

  public String getName() {

    return name;

  }

  public void setName(String name) {

    this.name = name;

  }

  public Engine(String name) {

    super();

    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();
  OrbitaModule builderOrbitaModule();
  EscapeTower builderEscapeTower();
}

//创建返回对象的接口

public interface AirShipDirector {
  AirShip directAirShip();
}

//组装对象的实现类

public class AirShipBuilderImpl implements AirShipBuilder{

  @Override
  public Engine builderEngine() {
    System.out.println("构建发动机");
    return new Engine("发动机");
  }

  @Override
  public OrbitaModule builderOrbitaModule() {
    System.out.println("构建逃逸塔");
    return new OrbitaModule("逃逸塔");
  }

  @Override
  public EscapeTower builderEscapeTower() {
    System.out.println("构建轨道舱");
    return new EscapeTower("轨道舱");
  }
}

//返回对象的实现类

public class AirShipDirectorImpl implements AirShipDirector{

  //创建一个构造组件的接口对象,此处可以使用工厂模式进行修改

  private AirShipBuilder airShipBuilder;

  public AirShipDirectorImpl(AirShipBuilder airShipBuilder) {
    super();
    this.airShipBuilder = airShipBuilder;
  }
  @Override
  public AirShip directAirShip() {
    Engine builderEngine = airShipBuilder.builderEngine();
    OrbitaModule builderOrbitaModule = airShipBuilder.builderOrbitaModule();
    EscapeTower builderEscapeTower = airShipBuilder.builderEscapeTower();
    AirShip ship = new AirShip();
    ship.setEngine(builderEngine);
    ship.setEscapeTower(builderEscapeTower);
    ship.setEscapeTower(builderEscapeTower);
    return ship;
  }
}

//客户端调用

public class Client {

  public static void main(String[] args) {
    AirShipDirector airShipDirector = new AirShipDirectorImpl(new AirShipBuilderImpl());
    AirShip directAirShip = airShipDirector.directAirShip();
    System.out.println(directAirShip);
  }
}

建造者模式主要就是将建造飞船的过程简单的拆分开,让构建飞船的不同的组件让不同的类去完成,此处就可以和工厂模式和单例模式相结合,让开发变得更加清晰。

Java建造者模式的更多相关文章

  1. Java 建造者模式 简单的理解

    建造者模式 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,使用多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表 ...

  2. 今儿直白的用盖房子为例,给你讲讲Java建造者模式

    摘要:建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 本 ...

  3. java 建造者模式

    package de.bvb.test3; /** * 建造者模式: 假如一个类有4个字段,每个字段或者每几个字段的组合都需要设置为构造函数,构造函数就比较麻烦 * 而且如果再加一个字段进去也不好拓展 ...

  4. Java建造者模式(思维导图)

    图1 建造者模式[点击查看大图] 基本的知识点已在思维导图中,下面是demo 1,Builder 为创建一个产品对象的各个部件指定抽象接口 public interface PersonBuilder ...

  5. Java设计模式-建造者模式(Builder)

    将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指 ...

  6. Java设计模式04:常用设计模式之建造者模式(创建型模式)

    1. Java之建造者模式(Builder Pattern) (1)概念:       将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [ 构建与表示分离, 同构建不同表示 ] ...

  7. java设计模式之四建造者模式(Builder)

    工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到 ...

  8. 建造者模式(Java与Kotlin版)

    前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) 抽象工厂模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比J ...

  9. 我的Java设计模式-建造者模式

    在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...

随机推荐

  1. Scala脚本化-Ammonite

    Scala语言定义: Scala combines object-oriented and functional programming in one concise, high-level lang ...

  2. 从壹开始前后端分离 39 || 想创建自己的dotnet模板么?看这里

    缘起 开工是利啦!哈喽各位小伙伴,周三好呀,新的一年又开始了,老张给大家做个榜样,新的一年也要好好学习哟,这两天闲的无事就整理整理了这个系列的 Github 代码,增加了一个英文的 README ,然 ...

  3. 残差网络(Residual Networks, ResNets)

    1. 什么是残差(residual)? “残差在数理统计中是指实际观察值与估计值(拟合值)之间的差.”“如果回归模型正确的话, 我们可以将残差看作误差的观测值.” 更准确地,假设我们想要找一个 $x$ ...

  4. asp.net core系列 55 IS4结合Identity密码保护API

    一.概述 OAuth 2.资源所有者密码授权允许客户端(Client项目)向令牌服务(IdentityServer项目)发送用户名和密码,并获取代表该用户的访问令牌.本篇将IS4结合asp.net c ...

  5. Python进阶:设计模式之迭代器模式

    在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...

  6. 卷积神经网络之AlexNet

    由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 知道2012年,Alex等人提出的AlexNet网络在ImageNet大赛上以远超第二名的成绩夺冠,卷 ...

  7. 3.JAVA-方法重载,类的封装,构造/析构方法

    1.方法重载 和C++的函数重载一样,主要是实现多个相同的函数名,但是参数表不同. 参数表不同主要有以下几种 1) 参数个数不同 2) 参数类型不同 3) 参数顺序不同 2.类和对象 类class 用 ...

  8. Git 中 .gitignore 的配置语法

    一.前言 在日常的开发中,当我们需要将一个项目提交到 Git 时,并不是所有的文件都需要提交,比如一些自动生成的文件,类似于 .idea 文件.class 文件等,这时候就可以使用.gitignore ...

  9. nginx通过域名访问项目(不接项目名称),cookie丢失问题详解

    最近搞了个域名,想用它直接去访问Tomcat上部署的项目,开始一直必须加上项目名称,经过短暂配置,成功了. 访问一次,到达登陆页面,结果死活登录不进去,一直在登陆界面,原来是由于cookie丢失,现配 ...

  10. React 基础入门

    React 起源于 Facebook 内部项目,是一个用来构建用户界面的 Javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组 ...