建造者模式

建造者模式适用场景:

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

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

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. 京东云罗玉杰:OpenResty 在直播场景中的应用

    2019 年 3 月 23 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·北京站,京东云技术专家罗玉杰在活动上做了< OpenResty ...

  2. 基于async/non-blocking高性能redis组件库BeetleX.Redis

    BeetleX.Redis是基于async/non-blocking模式实现的高性能redis组件库,组件支持redis基础指令集,并封装更简便的List,Hashset和Subscribe操作.除了 ...

  3. 带着新人看java虚拟机01

    1.前言(基于JDK1.7) 最近想把一些java基础的东西整理一下,但是又不知道从哪里开始!想了好久,还是从最基本的jvm开始吧!这一节就简单过一遍基础知识,后面慢慢深入... 水平有限,我自己也是 ...

  4. 从css 3d说到空间坐标轴

    有一次我们说到掷骰子那个游戏,当时是用了一个steps属性+雪碧图来制作帧动画,这当然颇为不错,但其实一开始我想的不是这样的,我想的是用真的3d和动画去做,这个方案涉及到不少空间的知识,今天来给大伙好 ...

  5. 设计模式 | 装饰模式(decorator)

    定义: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 结构:(书中图,侵删) 一个被装饰接口类:从具体类中抽象出来, ...

  6. Yii2设计模式——静态工厂模式

    应用举例 yii\db\ActiveRecord //获取 Connection 实例 public static function getDb() { return Yii::$app->ge ...

  7. QQ登录界面布局

    简单的qq登录界面布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmln ...

  8. Spring boot 配置文件详解 (properties 和yml )

    从其他框架来看 我们都有自己的配置文件, hibernate有hbm,mybatis 有properties, 同样, Spring boot 也有全局配置文件. Springboot使用一个全局的配 ...

  9. [题解] 2038: [2009国家集训队]小Z的袜子(hose)

    莫队,卡常数 题目地址 思路 设\(\text{Vis[i]}\)为元素\(\text{i}\)在区间\(\text{[L,R]}\)的出现次数 考虑区间\(\text{[L,R]}\)和元素\(\t ...

  10. 开源:ASP.NET Aries 开发框架(已支持.NET Core)

    前言: 随着岁月的推进,不知不觉已在.NET这领域上战斗了十年了. 青春还没来得急好好感受,却已是步入健忘之秋的老人一枚了. 趁着还有点记忆,得赶紧把硬盘里那私藏的80G除外的东西,和大伙分享分享. ...