java实现建造者模式(Builder Pattern)

一、什么是建筑者模式?

  建造者模式(Builder Pattern)使用多个简单的对象一步一步构建一个复杂的对象。

  一个 Builder 类会一步一步构造最终的对象,该 Builder 类独立于其他对象。

  建造者模式主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

二、建造者模式的具体实现

结构图

建造者模式中的四个角色:

1、Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3、Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4、Product:要创建的复杂对象。

java代码实现

1、创建人类实体类

package com.designpattern.builderPattern;

/**
 * 对象 人
 *
 * @author zhongtao on 2018/9/17
 */
public class Human {

  private String head;
  private String body;
  private String hand;
  private String foot;

  public String getHead() {
    return head;
  }

  public void setHead(String head) {
    this.head = head;
  }

  public String getBody() {
    return body;
  }

  public void setBody(String body) {
    this.body = body;
  }

  public String getHand() {
    return hand;
  }

  public void setHand(String hand) {
    this.hand = hand;
  }

  public String getFoot() {
    return foot;
  }

  public void setFoot(String foot) {
    this.foot = foot;
  }
}

2、创建造人的 Builder 接口

package com.designpattern.builderPattern;

/**
 * 造人接口 规定造人的规范 需要头、身体、手、脚
 *
 * @author zhongtao on 2018/9/17
 */
public interface BuilderHuman {

  void buildHead();

  void buildBody();

  void buildHand();

  void buildFoot();

  /**
   * 返回创建的对象
   */
  Human createHuman();

}

3、ConcreteBuilder 创建不同类型的人
tallPerson

package com.designpattern.builderPattern;

/**
 * 高个子的人
 *
 * @author zhongtao on 2018/9/17
 */
public class TallPersonBuilder implements BuilderHuman {

  Human human;

  public TallPersonBuilder() {
    human = new Human();
  }

  @Override
  public void buildHead() {
    human.setHead("普通的头脑");
  }

  @Override
  public void buildBody() {
    human.setBody("壮实,高大的身体");
  }

  @Override
  public void buildHand() {
    human.setHand("长手");
  }

  @Override
  public void buildFoot() {
    human.setFoot("长脚");
  }

  @Override
  public Human createHuman() {
    return human;
  }
}

smartHuman

package com.designpattern.builderPattern;

/**
 * 聪明的人
 *
 * @author zhongtao on 2018/9/17
 */
public class SmartHumanBuilder implements BuilderHuman {

  Human human;

  public SmartHumanBuilder() {
    human = new Human();
  }

  @Override
  public void buildHead() {
    human.setHead("高智商的头脑");
  }

  @Override
  public void buildBody() {
    human.setBody("健康的身体");
  }

  @Override
  public void buildHand() {
    human.setHand("普通的手");
  }

  @Override
  public void buildFoot() {
    human.setFoot("普通的脚");
  }

  @Override
  public Human createHuman() {
    return human;
  }
}

4、Director 建造者模式的核心 调用具体建造者来创建不同的人

package com.designpattern.builderPattern;

/**
 * 管理造人的顺序 BuilderHuman不同,则创建的人不同
 * @author zhongtao on 2018/9/17
 */
public class HumanDirector {

  public Human createHumanByDirector(BuilderHuman builderHuman){
    builderHuman.buildHead();
    builderHuman.buildBody();
    builderHuman.buildHand();
    builderHuman.buildFoot();

    return builderHuman.createHuman();
  }
}

5、建造者模式测试

package com.designpattern.builderPattern;

import org.junit.Test;

/**
 * 测试
 *
 * @author zhongtao on 2018/9/17
 */
public class BuilderPatternTest {

  /**
   * 测试建造者模式
   */
  @Test
  public void test() {
    HumanDirector humanDirector = new HumanDirector();
    //创建高个子的人
    Human humanByDirector = humanDirector.createHumanByDirector(new TallPersonBuilder());
    System.out.println(humanByDirector.getHead());
    System.out.println(humanByDirector.getBody());
    System.out.println(humanByDirector.getHand());
    System.out.println(humanByDirector.getFoot());

    System.out.println("------简单的分割线------");
    //创建聪明的人
    Human smartHuman = humanDirector.createHumanByDirector(new SmartHumanBuilder());
    System.out.println(smartHuman.getHead());
    System.out.println(smartHuman.getBody());
    System.out.println(smartHuman.getHand());
    System.out.println(smartHuman.getFoot());
  }
}

三、建造者模式的优缺点

优点:

建造者独立,易扩展。
便于控制细节风险。

缺点:

产品必须有共同点,范围有限制。
如内部变化复杂,会有很多的建造类。

注意事项:

与工厂模式的区别,建造者模式更加关注与零件装配的顺序。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java设计模式之建造者模式(Builder模式)介绍

    Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到. 为何使用建造者模式 是为了将构建复杂对象的过程和它的部件解耦.注意:是解耦过程和部件. 因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮.方向盘.发动机,还

  • Java设计中的Builder模式的介绍

    概述 Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场景 相同的方法,不同的执行顺序,产生不同的事件结果 多个部件或零件,都可以装配到一个对象中,但产生的运行结果又不相同时 产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时 下面从一个Person例子进行分析重叠构造器模式.JavaBeans模式.Builder模式的使用.Person类有两个必要参数(id和name),有5

  • Java Builder Pattern建造者模式详解及实例

    Java Builder Pattern 1.概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品.即建造模式可以强制实行一种分步骤进行的建造过程. 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心. 举个简单的例子,如汽车,有很多部件,

  • Java Builder模式实现原理及优缺点解析

    Builder 模式中文叫作建造者模式,又叫生成器模式,它属于对象创建型模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.下图是建造者模式的通用类图: 在建造者模式中,有如下4种角色: Product:产品角色 Builder:抽象建造者,定义产品接口 ConcreteBuilder:具体建造者,实现Builder定义的接口,并且返回组

  • Java设计模式之Builder建造者模式

    一.场景描述 建造者模式同工厂模式.抽象工厂模式一样,用于创建继承类对象. 工厂模式:Java设计模式之工厂模式 抽象工厂模式:Java设计模式之抽象工厂模式 所不同的是,工厂模式下,各子类实现接口,通过工厂类创建子类对象:而建造者模式下,各子类拥有其建造者类,通过它创建不同的父类对象,最终实现多态,实际上子类.父类在代码中是不存在的. 以仪器数据采集工具为例,工厂模式下,定义接口"仪器数据采集工具",定义子类"PDF文件数据采集工具"和"Excel文件数

  • Java Builder模式构建MAP/LIST的实例讲解

    我们在构建一个MAP时,要不停的调用put,有时候看着觉得很麻烦,刚好,看了下builder模式,觉得这思路不错,于是乎,照着用builder模式写了一个构建MAP的示例, 代码如下: import java.util.HashMap; import java.util.Map; public class MapBuilder<T> { public Builder<T> b; public MapBuilder(Builder<T> b){ this.b = b; }

  • Java中Builder模式的实现详解

    前言 本文主要给大家介绍了关于如何实现Builder模式,大家在构建大对象时,对象的属性比较多,我们可以采用一个构造器或者使用空的构造器构造,然后使用setter方法去设置.在使用者使用这些方法时,会很多冗长的构造器参数列表或者setter方法.我们可以使用Builder模式来简化大对象的构造,提高代码的简洁性,同时提高使用者的编码体验. 下面我们将介绍在Java8之前.使用极简代码利器Lombok.Java8之后的Builder模式. Pre Java8 我们先来看下在Java8之前的Buil

  • 详解java构建者模式Builder

    定义 Builder模式是一步步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构建过程.该模式是将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离. 作为复杂对象可能有很多组成部分,比如汽车有车轮.方向盘.发动机.变速箱还有各种小零件等,如何将这些部件组装成一台汽车,这个装配的过程漫长且复杂,对于这种情况,为了对外部隐藏实现细节,就可以使用Builder模式将部件和组装过程分离,使得构建过程和部件分离可自由扩展,两者之间的耦合也降到最低

  • Java使用建造者模式实现办理手机套餐功能详解

    本文实例讲述了Java使用建造者模式实现办理手机套餐功能.分享给大家供大家参考,具体如下: 一.模式定义 建造者简单理解就是造东西,只不过建造者模式建造的不是一个简单的东西,是一个比较复杂的东西. 二.模式举例 1 模式分析 我们借用顾客到手杌营业厅去办理手机套餐的例子说明这一模式 经过抽象分析后,我们得出下面信息 客户张三--终端需求 营业厅操作员--指导者(通知指导建造者生产什么样的手机套餐) 计算机--建造者(建造各种手机套餐) 手机套餐--产品 2 建造者模式静态建模 3 代码示例 3.

  • java开发建造者模式验证实例详解

    目录 引言 经典再现 建造者模式优点及应用场景 工厂方法模式和建造者模式区别 拓展与总结 引言 创建一个类的实例,我们通常使用类中构造函数来完成对象的初始化,如果一个对象构造过程很复杂,如果将构造过程和对象使用的过程放在一起,就显得这个类很笨重,职责也不单一,最好的解决办法就是将构造过程拿出来单独进行封装,类的使用单独封装一个类就会好很多.如:mybaits中的SqlSessionFactoryBulider和SqlSessionFactory两个类,下图为SqlSessionFactoryBu

  • PHP设计模式(三)建造者模式Builder实例详解【创建型】

    本文实例讲述了PHP设计模式:建造者模式Builder.分享给大家供大家参考,具体如下: 1. 概述 在软件开发的过程中,当遇到一个"复杂的对象"的创建工作,该对象由一定各个部分的子对象用一定的算法构成,由于需求的变化,复杂对象的各个部分经常面临剧烈的变化,但将它们组合在一起的算法相对稳定. 例子1:买肯德基 典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡.炸鸡.可乐和玩具车).这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的. 客户端:顾客,想去买一

  • java实现建造者模式(Builder Pattern)

    一.什么是建筑者模式?   建造者模式(Builder Pattern)使用多个简单的对象一步一步构建一个复杂的对象.   一个 Builder 类会一步一步构造最终的对象,该 Builder 类独立于其他对象.   建造者模式主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定. 二.建造者模式的具体实现 结构图 建造者模式中的四个角色:

  • java设计模式:建造者模式之生产线

    目录 什么是建造者模式 建造者模式中的角色 产品角色(Product) 抽象建造者(Builder) 具体建造者角色(ConcreteBuilder) 导演者角色(Director) 最终测试 总结 什么是建造者模式 建造者模式( Builder Pattern )是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 实用范围: 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时.当构造过程必须允许被构造的对象有不同表示时. 设计模式和编程

  • java设计模式--建造者模式详解

    目录 引例 一般解法 代码: AbstractHouse(房子) Bungalow(平房) Villa (别墅) 客户端调用 建造者模式 建造者模式解法 代码: House类(Product产品) HouseBuilder类(Builder抽象建造者) 3.Bungalow类(ConcreteBuilder具体建造者A) 4.Villa类(ConcreteBuilder具体建造者B) 5.HouseDirector类(Director指挥者) 客户端调用 总结 引例 需求:建造房子,建造过程包括

  • C++设计模式之建造者模式(Builder)

    建造者模式与工厂模式最大的区别在与建造者模式更注重的是创建的一系列过程,如流水化作业,工厂模式强调的是区分不同的工厂和产品,而建造者模式更注重的统一不同产品在流水线上的工序,达到统一作业. 作用 建造者模式是将一个复杂对象和他的构造和组装过程分离,这样再重复创建不同对象时使用相同的流程进行建造.对于调用者来说,只需要知道产品的类型,而不需要知道具体的组装过程. 类视图 代码实现 class Builder { public: virtual void SelectCpu()= 0; virtua

  • java设计模式之建造者模式学习

    1 概述建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中"分步骤"是一个稳定的算法,而复杂对象的各个部分则经常变化.因此, 建造者模式主要用来解决"对象部分"的需求变化. 这样可以对对象构造的过程进行更加精细的控制. 2 示例以生产手机为例,每个手机分为屏幕Screen.CPU.Battery.现在要生产两种手机,苹果机和三星. 苹果: 复制代码 代码如下: package org.scott.build

  • 理解java设计模式之建造者模式

    建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中"分步骤"是一个稳定的算法,而复杂对象的各个部分则经常变化.因此, 建造者模式主要用来解决"对象部分"的需求变化. 这样可以对对象构造的过程进行更加精细的控制. package com.shejimoshi.create.Builder; /** * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 * 适用性: * 当创

随机推荐