设计模式-建造者模式

news/2025/1/16 7:53:03/

建造者模式是一种创建型设计模式,它允许你创建复杂对象的不同表示,而无需直接与其构造函数参数进行交互。建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式的核心思想是将一个复杂对象的构建过程分解为多个简单的步骤,然后按照特定的顺序进行组装,最终构建出一个完整的对象。这种方式可以使得构建过程更加灵活,同时也可以避免在构建过程中出现错误。

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

1. 产品类:表示被构建的复杂对象,包含多个组成部分。

2. 抽象建造者类:定义了创建产品各个部分的抽象接口,以及组装产品的抽象方法。

3. 具体建造者类:实现了抽象建造者接口,完成了产品各个部分的具体创建和组装方法。

4. 指挥者类:负责调用具体建造者类中的方法,按照特定的顺序组装产品。

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

1. 需要创建复杂对象的场景,其中复杂对象由多个部分组成,且各个部分之间的创建顺序和组装方式不同。

2. 需要创建的对象具有复杂的内部结构,且需要隐藏其创建细节。

3. 需要创建的对象的属性相互依赖,需要按照特定的顺序进行创建和组装。

4. 需要创建的对象的表示形式有多种,需要根据不同的场景进行创建。

总之,建造者模式可以帮助我们更加灵活地创建复杂对象,同时也可以避免在创建过程中出现错误。

用java来实现以下建造者模式:

public 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 String getPartA() {return partA;}public String getPartB() {return partB;}public String getPartC() {return partC;}
}public interface Builder {void buildPartA();void buildPartB();void buildPartC();Product getResult();
}public class ConcreteBuilder implements Builder {private Product product = new Product();@Overridepublic void buildPartA() {product.setPartA("PartA");}@Overridepublic void buildPartB() {product.setPartB("PartB");}@Overridepublic void buildPartC() {product.setPartC("PartC");}@Overridepublic Product getResult() {return product;}
}public class Director {public void construct(Builder builder) {builder.buildPartA();builder.buildPartB();builder.buildPartC();}
}public class Client {public static void main(String[] args) {Director director = new Director();Builder builder = new ConcreteBuilder();director.construct(builder);Product product = builder.getResult();System.out.println(product.getPartA());System.out.println(product.getPartB());System.out.println(product.getPartC());}
}

在上面的示例代码中,Product类是要被构建的复杂对象,Builder接口定义了构建过程中需要实现的方法,ConcreteBuilder类实现了Builder接口,负责具体的构建过程,Director类负责调用Builder的方法来构建Product对象,Client类则是使用建造者模式的客户端。


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

相关文章

使用StaMPS_Visualizer

0 前言 StaMPS-Visualizer :由thho开发的用于可视化由StaMPS / MTI处理的DInSAR结果。 github地址:StaMPS-Visualizer 使用StaMPS_Visualizer需要配置好StaMPS,并安装好R和Rstudio Ubuntu中安装StaMPS StaMPS-Visualizer 安装步骤–在linux…

算法:贪婪算法、分而治之

算法:贪婪算法、分而治之 文章目录1.贪婪算法计数硬币实例12.分而治之分割/歇征服/解决合并/合并实例23.动态规划对照实例34.基本概念算法数据定义数据对象内置数据类型派生数据类型基本操作1.贪婪算法 设计算法以实现给定问题的最佳解决方案。在贪婪算法方法中&am…

nodejs+vue手机数码电子网上购物商城电商推荐系统elementui

管理员登陆后,主要功能模块包括首页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等功能。 用户进入系统可以进行首页、商品信息、公告信息、个人中心、后台管理、购物车、在线客服息管理等操 开发语言:nodejsvueelementui 框架…

【虚幻引擎UE】UE5核心效率插件推荐

一、UnrealEditorPythonScripts (基于UE5 的Python支持插件) 支持Python语言基于UE5进行开发 GIT地址:https://github.com/mamoniem/UnrealEditorPythonScripts 二、Haxe-UnrealEngine5 (基于UE5 的Haxe支持插件) Haxe是一门新兴的开源编程语言,是一种开源的编程语言。…

ElasticSearch - SpringBoot整合ES:精确值查询 term

文章目录00. 数据准备01. ElasticSearch 结构化搜索是什么?02. ElasticSearch 结构化搜索方式有哪些?03. ElasticSearch 全文搜索方式有哪些?04. ElasticSearch term 查询数字?05. ElasticSearch term 查询会不会计算评分&#xf…

测试老鸟,带你手写Python自动化测试 ddt 数据驱动框架(超细细)

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 python做自动化测试…

Cursor软件,内含GPT服务,软件免费,可以进行聊天

Cursor软件,内含GPT服务,软件免费,可以进行聊天 Cursor这个软件的安装 安装好后,双点击使用: 最后有软件地址 如果英文不好,怎么办,搭配有道词典: 效率嘎嘎快 用Ctrl+K进行代码指令后面如下自动生成代码 也可以在聊天框里面进行代码的编写和对话

Python每日一练(20230327)

目录 1. 最大矩形 🌟🌟🌟 2. 反转链表 II 🌟🌟 3. 单词接龙 II 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日…