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


猜你喜欢
- PermissionManage项目地址:https://github.com/why168/AndroidProjects/tree/ma
- 因为公司业务需要,需要把性能日志和业务日志分开打印,用elk收集处理,所以需要对不同的业务的日志,打印到不同文件。使用的是spring bo
- 本文实例讲述了C#图像边缘检测(Roberts)的方法。分享给大家供大家参考。具体如下://定义roberts算子函数private sta
- Java BufferWriter写文件之后文件是空的或者数据不全在编程的过程中,读写文件是非常常见的操作,在这里我问介绍一下最近我遇到的集
- 在网上很多关于dubbo异常统一处理的博文,90%都是抄来抄去。大多都是先上一段dubbo中对于异常的统一处理的原码,然后说一堆的(甚至有1
- 这篇文章主要介绍了Java switch使用及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 在此附上超详细JDK1.8安装与配置超详细JDK1.8安装与配置一、卸载JDK应用程序①在开始处,点击设置②点击应用③点击程序和功能④打开程
- Spring中添加计时器的时候根据业务需求可能会需要动态处理触发时间;import org.slf4j.Logger; import org
- spring开启声明式事务导入依赖pom.xml<dependencies>  
- 1.新建springBoot项目在前面有两种方式2.加入thymeleaf模板引擎SpringBoot推荐使用thymeleaf模板引擎语法
- 前言关于RecyclerView的使用这里就不在赘述了,相信网上一搜一大把(本人之前的文章也有简单的使用介绍),这次我们讲的是Recycle
- using System;using System.Data;using System.Data.OleDb;namespace ZFSof
- 一、什么是IO流输入流和输出流。输入流:数据从数据源(文件)到程序(内存)的路径输出流:数据从程序(内存)到数据源(文件)的路径二、常用的文
- servlet实现文件上传,预览,下载和删除,供大家参考,具体内容如下一、准备工作:1.1 文件上传插件:uploadify;1.2 文件上
- 一、概述一共两个线程,一个线程生产产品,一个线程消费产品,使用同步代码块方法,同步两个线程。当产品没有时,通知生产者生产,生产者生产后,通知
- 目录前言实现思路其它总结前言本文将介绍如何通过使用EasyExcel自定义 * 实现在最终的Excel文件中新增一列自增的序号列,最终的效果
- 本文实例为大家分享了Android自定义广播接收的具体代码,供大家参考,具体内容如下实现效果:MainActivity.java代码:pac
- 在多线程对一个整数进行自增操作时,需要用synchronized进行同步。然而,如果synchronized的对象选取的不合适的话,就无法实
- 前言Go语言定义Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thomps
- 在调用一些简单的方法实现一系列的动作时,回退的问题比较重要。作为一款用户体验良好的产品而言,有回退功能将显得比较人性化,想想如果我们常用的w