Java创建型设计模式之建造者模式详解

 更新时间:2023年05月11日 08:49:09   作者:蜀山剑客李沐白  
建造者模式是Java中一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程分解为多个简单对象的构建过程,本文将详细介绍Java中的建造者模式,包括它的定义、结构、实现方法以及应用场景等方面,希望对大家有所帮助

建造者模式是Java中一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程分解为多个简单对象的构建过程,并且使这些构建过程按照一定的顺序进行组装,最终实现对复杂对象的创建。本文将详细介绍Java中的建造者模式,包括它的定义、结构、实现方法以及应用场景等方面。

前言

当我们需要创建一个具有多个属性或组件的对象时,通常需要使用大量的构造函数和setter方法。随着属性或组件的增加,这种方式很容易变得混乱和难以维护。此时,建造者模式就可以很好地解决这个问题。

建造者模式将对象的构建过程分解为多个步骤,由调用端根据需要选择所需的步骤,并按照一定的顺序进行组装,最终实现对复杂对象的创建。通过使用建造者模式,可以将对象的构建过程和具体的构建实现分离开来,从而提高代码的可维护性和可读性。

定义

建造者模式是一种创建型模式,其定义如下:

将一个复杂对象的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示。

换句话说,建造者模式将对象的构建过程分解为多个简单对象的构建过程,并按照一定的顺序进行组装,从而实现对复杂对象的创建。通过使用建造者模式,可以使对象的构建过程和具体的构建实现相互独立,从而提高代码的可维护性和可读性。

结构

建造者模式包含以下几个角色:

1.产品类(Product)

产品类是一个具有多个属性或组件的复杂对象,它由多个简单对象组成。

public class Product {
    private String part1;
    private String part2;
    private String part3;

    // 省略 getter 和 setter 方法
}

2.抽象建造者类(Builder)

建造者类是一个抽象类或接口,它定义了创建产品对象的各个部分的抽象方法。在实际应用中,通常需要定义多个不同的建造者类来创建不同类型的产品对象。

public interface Builder {
    void buildPart1();
    void buildPart2();
    void buildPart3();
    Product getResult();
}

3.具体建造者类(ConcreteBuilder)

具体建造者类是抽象建造者类的子类,它实现了抽象建造者类中定义的所有抽象方法,并且根据具体需求组装产品对象的各个部分。

public class ConcreteBuilder implements Builder {
    private Product product = new Product();

    @Override
    public void buildPart1() {
        product.setPart1("part1");
    }

    @Override
    public void buildPart2() {
        product.setPart2("part2");
    }

    @Override
    public void buildPart3() {
        product.setPart3("part3");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

4.指导者类(Director)

指导者类负责创建具体建造者类的实例,并调用具体建造者类中的方法来组装产品对象的各个部分。在实际应用中,通常只需要一个指导者类即可。

public class Director {
    public void construct(Builder builder) {
        builder.buildPart1();
        builder.buildPart2();
        builder.buildPart3();
    }
}

以上就是建造者模式的结构,下面我们来详细说明其实现方法。

实现方法

在实际使用建造者模式时,通常需要按照以下步骤进行操作:

1.定义产品类

首先,需要定义一个具有多个属性或组件的复杂对象,即产品类。

2.定义抽象建造者类

接着,需要定义一个抽象建造者类或接口,其中包含了创建产品对象各个部分的抽象方法。

3.定义具体建造者类

然后,需要定义一个或多个具体建造者类,它们是抽象建造者类的子类,实现了抽象建造者类中定义的抽象方法,并且根据具体需求组装产品对象的各个部分。

4.定义指导者类

最后,需要定义一个指导者类,它负责创建具体建造者类的实例,并调用具体建造者类中的方法来组装产品对象的各个部分。在实际应用中,通常只需要一个指导者类即可。

5.使用建造者模式创建对象

最后,我们可以使用建造者模式来创建对象,即先创建一个具体建造者类的实例,然后将该实例交给指导者类进行组装,最终得到一个完整的产品对象。

Builder builder = new ConcreteBuilder();
Director director = new Director();
director.construct(builder);
Product product = builder.getResult();

以上就是建造者模式的实现方法,下面我们来介绍一下它的应用场景。

应用场景

建造者模式适用于以下场景:

1.对象的构建过程比较复杂

当需要创建的对象较为复杂,需要通过多个步骤来生成时,可以使用建造者模式。

2.需要生成不同表示的对象

当需要按照不同的逻辑顺序来创建对象时,或者需要生成不同表示的对象时,可以使用建造者模式。

3.希望分离对象的构建过程和表示

当希望分离对象的构建过程和具体表示时,可以使用建造者模式。

例如,在Java中,StringBuilder就是使用了建造者模式。在程序中,我们经常需要拼接字符串,如果使用String类型来拼接字符串,每次拼接都会创建一个新的String对象,会浪费大量的内存。而使用StringBuilder,它将所需的字符串逐个添加进去,并在需要时将它们组装成一个完整的字符串对象,从而避免了不必要的内存浪费。

另外,在Java中,JDK中提供的Calendar类也使用了建造者模式。在创建日期时间对象时,需要设置年、月、日、时、分、秒等信息,如果使用普通的构造函数或setter方法来设置这些信息,会使得代码变得冗长且难以维护。而通过使用Calendar类提供的建造者模式,可以将这些设置信息分解为多个简单的步骤,并按照一定的顺序进行组装,从而实现对日期时间对象的创建。

总结

通过本文的介绍,我们了解了Java中的建造者模式,包括它的定义、结构、实现方法以及应用场景等方面。建造者模式将对象的构建过程分解为多个简单对象的构建过程,并按照一定的顺序进行组装,最终实现对复杂对象的创建。通过使用建造者模式,可以将对象的构建过程和具体的构建实现分离开来,从而提高代码的可维护性和可读性。

到此这篇关于Java创建型设计模式之建造者模式详解的文章就介绍到这了,更多相关Java建造者模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 谈Java static关键字的用法与好处

    谈Java static关键字的用法与好处

    这篇文章主要为大家详细介绍了Java static关键字的用法与好处,感兴趣的朋友可以参考一下
    2016-05-05
  • 解读spark添加二方包导致依赖冲突排查问题

    解读spark添加二方包导致依赖冲突排查问题

    这篇文章主要介绍了spark添加二方包导致依赖冲突排查问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java日常练习题,每天进步一点点(30)

    Java日常练习题,每天进步一点点(30)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java处理表格的实用工具库

    Java处理表格的实用工具库

    EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目,在尽可能节约内存的情况下支持读写百M的Excel,下面这篇文章主要给大家分享介绍了一个关于Java处理表格的实用工具库,需要的朋友可以参考下
    2021-11-11
  • 23种设计模式(8) java外观模式

    23种设计模式(8) java外观模式

    这篇文章主要为大家详细介绍了23种设计模式之java外观模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 详解Java中Dijkstra(迪杰斯特拉)算法的图解与实现

    详解Java中Dijkstra(迪杰斯特拉)算法的图解与实现

    Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。本文将详解该算法的图解与实现,需要的可以参考一下
    2022-05-05
  • 详解如何在SpringBoot中自定义参数解析器

    详解如何在SpringBoot中自定义参数解析器

    这篇文章主要为大家详细介绍了如何在SpringBoot中实现自定义参数解析器,文中的示例代码讲解详细,对我们学习或工作有一定帮助,需要的可以参考一下
    2022-05-05
  • 详解spring-boot集成elasticsearch及其简单应用

    详解spring-boot集成elasticsearch及其简单应用

    本篇文章主要介绍了详解spring-boot集成elasticsearch及其简单应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • java开发RocketMQ之NameServer路由管理源码分析

    java开发RocketMQ之NameServer路由管理源码分析

    这篇文章主要为大家介绍了java开发中RocketMQ之NameServer路由管理源码分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • java实现Excel的导入导出

    java实现Excel的导入导出

    这篇文章主要为大家详细介绍了java实现Excel的导入导出,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06

最新评论