文档章节

建造者模式

Java搬砖工程师
 Java搬砖工程师
发布于 06/21 16:07
字数 767
阅读 5
收藏 0

1、工厂模式中创建的对象大都是简单的对象

  • 复杂的产品类并且拥有不同的属性特点的管理就需要用到建造者模式

2、建造者模式:

  • 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的标识
  • 用户只需指定需要创建的类型就得到它们,至于具体建造的过程和细节就不知道了

提供产品类:

public class Product {
    /**
     * 定义一些关于产品的操作
     */
    private String part1;
    private String part2;
    public String getPart1() {
        return part1;
    }
    public void setPart1(String part1) {
        this.part1 = part1;
    }
    public String getPart2() {
        return part2;
    }
    public void setPart2(String part2) {
        this.part2 = part2;
    }
}

提供抽象构建者接口:

public interface Builder {
    public void buildPart1();
    public void buildPart2();
    public Product retrieveResult();
}
  • 实现抽象构建者接口的具体构建者:
public class ConcreteBuilder implements Builder {

    private Product product = new Product();
    /**
     * 产品零件建造方法1
     */
    @Override
    public void buildPart1() {
        //构建产品的第一个零件
     product.setPart1("编号:9527");
    }
    /**
     * 产品零件建造方法2
     */
    @Override
    public void buildPart2() {
        //构建产品的第二个零件
     product.setPart2("名称:XXX");
    }
    /**
     * 产品返还方法
     */
    @Override
    public Product retrieveResult() {
        return product;
    }

}

实现指挥者,指挥构建者构建产品:

public class Director {
    /**
     * 持有当前需要使用的建造器对象
     */
    private Builder builder;
    /**
     * 构造方法,传入建造器对象
     * @param builder 建造器对象
     */
    public Director(Builder builder){
        this.builder = builder;
    }
    /**
     * 产品构造方法,负责调用各个零件建造方法
     */
    public void construct(){
        builder.buildPart1();
        builder.buildPart2();
    }
}

客户端调用:

public class Client {
    public static void main(String[]args){
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        director.construct();
        Product product = builder.retrieveResult();
        System.out.println(product.getPart1());
        System.out.println(product.getPart2());
    }
}

3、整体程序分析:

  • 创建一个符合多个条件的对象,而不是像工厂方法模式创建一个具体的对象
  • 把产品所有的功能和特点都集成到了具体构建者中去实现的,至于指挥者只负责指挥具体构建者生产
  • 建造者模式应用时就是把创建复杂对象与对象是由什么组成的及如何装配的完全分开

4、使用场景

  • 1、需要生成的产品对象有复杂的内部结构,每一个内部成分本身可以是对象,也可以仅仅是一个对象(即产品对象)的一个组成部分
  • 2、需要生成的产品对象的属性相互依赖
  • 建造模式可以强制实行一种分步骤进行的建造过程
  • 如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值,使用建造模式是一个很好的设计思想
  • 3、在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到

© 著作权归作者所有

共有 人打赏支持
上一篇: 原型设计模式
下一篇: Drools
Java搬砖工程师
粉丝 26
博文 260
码字总数 166188
作品 0
南京
程序员
私信 提问
我的Java设计模式-建造者模式

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

Jet啟思
2017/10/11
0
0
设计模式之禅之设计模式-建造者模式

一:建造者模式的定义 --->建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 ● Product产品类 通常是实...

无信不立
2016/01/04
0
0
人人都会设计模式---建造者模式--Builder

PS:转载请注明出处 作者: TigerChain 地址: www.jianshu.com/p/300cbb9ee… 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅读,老手直接略过 2、教程...

TigerChain
2017/12/03
0
0
菜鸟成长系列-Builder 建造者模式

菜鸟成长系列-概述 菜鸟成长系列-面向对象的四大基础特性 菜鸟成长系列-多态、接口和抽象类 菜鸟成长系列-面向对象的6种设计原则 菜鸟成长系列-单例模式 菜鸟成长系列-工厂模式 什么是产品的...

2017/12/30
0
0
python设计模式-建造者模式

在上一篇python设计模式:抽象工厂模式中,我们尝试用抽象工厂模式规范化了 Pizza 原材料的供应以及 Pizza 的创建。但是我们忽略了一个问题,那就是每种 Pizza 的烘焙时间依赖于生面团的厚度...

goodspeed
2017/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JeeSite 4.x 树形结构的表设计和用法

有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章。 在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理...

ThinkGem
18分钟前
10
0
0022-如何永久删除Kafka的Topic

1.问题描述 使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Topic时报错“already exists”。 2.问题复现...

Hadoop实操
21分钟前
0
0
技术工坊|区块链中的p2p网络(上海)

区块链是一个去中心化的系统,每个节点分布在全球各地,那么节点之间是如何自发地组成网络,又如何进行通信的?区块链中的p2p网络算法与bt下载中的p2p网络有什么区别?11月28日,第29期技术工...

HiBlock
26分钟前
1
0
MySQL性能优化之char、varchar、text的区别

在存储字符串时, 可以使用char、varchar或者text类型, 那么具体使用场景呢? 参考下面这个表结构: 1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。 ...

hansonwong
29分钟前
0
0
并发编程系列:4大并发工具类的功能、原理、以及应用场景

一:并发工具包 1.并发工具类 提供了比synchronized更加高级的各种同步结构:包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作。 2.并发容器 提供各种线程安全...

游人未归
39分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部