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

作者:蜀山剑客李沐白 时间:2023-10-09 17:25:13 

建造者模式是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();
   }
}

来源:https://juejin.cn/post/7231418548681506853

标签:Java,建造者模式
0
投稿

猜你喜欢

  • Android 二维码 生成和识别二维码 附源码下载

    2023-05-01 12:45:01
  • Mybatis核心组成部分之SQL映射文件揭秘详解

    2023-08-22 18:45:21
  • C# 进行图片压缩的示例代码(对jpg压缩效果最好)

    2023-05-11 16:34:19
  • Android中GPS坐标转换为高德地图坐标详解

    2023-10-07 20:40:24
  • Android应用动态修改主题的方法示例

    2022-01-08 10:50:34
  • Flutter 如何封装文本输入框组件

    2023-09-27 02:54:51
  • JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析

    2022-04-11 22:50:02
  • arthas jprofiler做复杂链路的调用分析

    2022-01-15 12:01:25
  • Java中单例模式的7种写法

    2021-09-05 23:40:57
  • 在C#中根据HardwareID获取驱动程序信息的实现代码

    2023-08-04 08:15:31
  • Android游戏开发 自定义手势--输入法手势技术

    2021-08-01 07:52:12
  • Android中系统自带锁WalkLock与KeyguardLock用法实例详解

    2023-11-26 01:50:49
  • android工程下不能运行java main程序的解决方法

    2023-06-23 21:54:08
  • 使用Jetpack Compose实现翻转卡片效果流程详解

    2022-01-24 16:26:55
  • 深入了解c# 信号量和互斥体

    2022-09-19 11:07:47
  • c# 插入数据效率测试(mongodb)

    2021-12-16 12:46:07
  • 浅谈JMeter engine启动原理

    2022-02-22 03:06:47
  • Android广播接收机制详细介绍(附短信接收实现)

    2023-04-16 10:09:57
  • Android天气预报之基于HttpGet对象解析天气数据的方法

    2021-11-01 08:00:13
  • 详解Spring cloud使用Ribbon进行Restful请求

    2021-07-09 11:05:28
  • asp之家 软件编程 m.aspxhome.com