Java设计模式之一:建造者模式

news/2024/10/18 10:17:46/

目录

一、什么是建造者模式

二、建造者模式如何使用

三、建造者模式的优势和应用场景


一、什么是建造者模式

Java建造者模式是一种创建对象的设计模式,它通过将对象的构造过程分离出来,使得同样的构建过程可以创建不同的表示。建造者模式适用于创建复杂对象,它将对象的构建过程分解成多个步骤,每个步骤由一个具体的建造者来负责,最终由一个指挥者来组装这些部件。

在建造者模式中,通常包含以下几个角色:

  1. 产品(Product):表示被构建的复杂对象,包含多个组成部分。
  2. 抽象建造者(Builder):定义对象的构建步骤和接口,具体建造者需要实现这个接口来创建不同的产品。
  3. 具体建造者(Concrete Builder):实现抽象建造者接口,负责具体的构建过程,包括构建各个部件和返回最终构建的产品。
  4. 指挥者(Director):负责调用具体建造者的方法来构建产品,控制构建的流程和顺序。

使用建造者模式可以将复杂对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示,提高了代码的复用性和灵活性。同时,建造者模式也可以隐藏产品的构建细节,使得客户端不需要知道具体的构建过程,只需要通过指挥者来创建产品即可。

 

二、建造者模式如何使用

以下是一个使用Java建造者模式的示例代码:
 

// 产品类
class Product {private String partA;private String partB;private String partC;public void setPartA(String partA) {this.partA = partA;}public void setPartB(String partB) {this.partB = partB;}public void setPartC(String partC) {this.partC = partC;}public void show() {System.out.println("Part A: " + partA);System.out.println("Part B: " + partB);System.out.println("Part C: " + partC);}
}// 抽象建造者
interface Builder {void buildPartA();void buildPartB();void buildPartC();Product getResult();
}// 具体建造者
class ConcreteBuilder implements Builder {private Product product;public ConcreteBuilder() {this.product = new Product();}@Overridepublic void buildPartA() {product.setPartA("Part A");}@Overridepublic void buildPartB() {product.setPartB("Part B");}@Overridepublic void buildPartC() {product.setPartC("Part C");}@Overridepublic Product getResult() {return product;}
}// 指挥者
class Director {private Builder builder;public Director(Builder builder) {this.builder = builder;}public void construct() {builder.buildPartA();builder.buildPartB();builder.buildPartC();}
}// 客户端代码
public class BuilderPatternExample {public static void main(String[] args) {Builder builder = new ConcreteBuilder();Director director = new Director(builder);director.construct();Product product = builder.getResult();product.show();}
}

在以上示例中,我们定义了一个产品类。


Product,其中包含了三个部件partApartBpartC。抽象建造者Builder定义了产品的构建步骤和接口,具体建造者ConcreteBuilder实现了抽象建造者接口,并负责具体的构建过程。指挥者Director负责调用具体建造者的方法来构建产品,控制构建的流程和顺序。

在客户端代码中,我们创建了一个具体建造者ConcreteBuilder的实例,并将其传递给指挥者Director。然后调用指挥者的construct()方法来构建产品,最后通过具体建造者的getResult()方法获取构建完成的产品。最终调用产品的show()方法展示产品的部件信息。


三、建造者模式的优势和应用场景

  •  建造者模式的优势
  1. 将复杂对象的创建过程封装在具体的建造者中,使得代码结构清晰,易于理解和维护。
  2. 可以通过改变具体建造者来创建不同的产品表示,灵活性高。
  3. 隐藏了产品的构建细节,使客户端不需要关心具体的建造过程,只需要通过指挥者来获取最终的产品。
  • 建造者模式的应用场景
  1. 当对象的构建过程较为复杂,需要多个步骤,并且可以有不同的表示时,可以考虑使用建造者模式。
  2. 当需要创建的对象包含多个部分,并且这些部分之间有一定的依赖关系时,可以使用建造者模式来确保部件的组装顺序和正确性。
  3. 当希望隐藏对象的构建细节,只向客户端暴露一个简单的构建接口时,可以使用建造者模式。
  4. 当需要创建的对象具有复杂的内部结构,但外部只需要关注其高层次的表示时,可以使用建造者模式。

总的来说,建造者模式适用于构建过程复杂、对象组成部分多且可变、希望隐藏构建细节的场景,能够提高代码的可读性、灵活性和可维护性。

 


http://www.ppmy.cn/news/775006.html

相关文章

HarmonyOS学习路之开发篇—设备管理(设备标识符)

NetworkID 简介 定义 网络设备节点通信标识符,是分布式软总线提供的一种非永久性标识符。NetworkID基于Java原生的UUID接口随机生成,长度为32字节,使用十六进制表示。主要用于业务调用分布式能力时,标识分布式网络内的设备节点。…

ARMv7,ARM7,ARMA7有什么区别

随着ARM的发展,芯片也越来越多,对芯片的称呼也多了。首先,ARMv7属于内核版本号,而ARM 7则为Soc的称号。其中,内核的版本号,是有V1到V2 V3等,从小到大,性能越来越好。如下图&#xff…

Docker部署Doris超详细图文教程

Doris安装有非常多的方法,这里主要介绍Docker中使用dev容器用来学习和测试的方法,避免在其他教程中踩坑(生产环境不建议使用Docker安装) 这里介绍一个不踩坑的docker本地单机版,笔者安装环境为Windows下的Docker,若为Linux系统安装…

030、SQL语句之数据类型与表达式

数据类型与表达式 数值数据类型整数数据类型定点数据类型浮点数据类型数值字面值BIT数据类型布尔表达式 时间数据类型时间戳和时区时间间隔关键字 字符串数据类型文本数据类型二进制ENUM 类型SET 类型字符串数据类型比较引号的使用字符集和排序规则CAST函数选择数据类型Null 数…

macbook pro的漏电

问题: macbook pro 2015漏电。 解决办法: 1,使用三相插座。 你懂的,很多时候不具备这个条件。 2,笔记本外壳接地。 其实跟上面的原理一样。 一般书房也不靠近接地的线路啊。 3,电工胶布 把跟手腕接触的部…

【硬件】漏电

原理:设备外壳与火线由于某种原因连通(非绝缘状态),导致外壳与地之间有一定的电位差,就会产生漏电。 检测:电笔接触带电体。亮后即灭是静电,长亮是漏电。也可用万用表测对地电压。 原因&#…

主板漏电短路50Ω

故障现象:电话口无电压输出 维修结果:更换SI3217x芯片 附件: 分析过程: 原来故障为电话口无电压,更换SI3217x芯片后工作正常,但发现SI3217x芯片轻微发热主供电3.3V短路到50欧姆,正常阻值为k欧…

服务器主板电池的电压不稳定怎么办,主板因静电造成的故障现象与解决方法

故障现象一:一台机器,cpu为c466,主板为华硕p2b,内存为64mb,开机运行一段时间后,机箱内出现打火声,屏幕上出现许多杂乱字符,并随机出现奇偶校验错误,提示“parity check1或…