【分享】Java Builder 建造者模式之案例分享

news/2024/9/23 1:39:42/

介绍

建造者模式(Builder)核心目的是通过使用多个简单对象一步步构建出一个复杂对象。通过将复杂对象的构造过程拆分为多个简单的步骤,使得创建对象更加灵活,可读性和可维护性更强。


使用场景

  • 创建一个由多个部分组成的复杂对象,需要遵循特定顺序创建对象
  • 相同的构建过程可以创建不同的对象表现(类似构造器重载)
  • 不影响代码原来的功能情况下,方便扩展新的组成部分

建造者模式组成部分

  • 产品(Product):表示最终要构建的复杂对象
  • 建造者(Builder):定义用于构建产品的接口,包含创建产品各个部分的方法
  • 具体建造者(Concrete Builder):实现Builder接口,完成产品各个部分的具体构建工作。
  • 指挥者(Director):负责调用合适的建造者方法,按照特定顺序组装产品。

代码案例

在这个示例代码中,我们有一个Pizza类,它有4个属性:面团、酱料、奶酪和配料。我们使用内部类Builder来构建Pizza实例。

public class Pizza {private String dough;private String sauce;private String cheese;private List<String> toppings;private Pizza(Builder builder) {this.dough = builder.dough;this.sauce = builder.sauce;this.cheese = builder.cheese;this.toppings = builder.toppings;}public static class Builder {private String dough;private String sauce;private String cheese;private List<String> toppings = new ArrayList<String>();public Builder(String dough, String sauce) {this.dough = dough;this.sauce = sauce;}public Builder cheese(String cheese) {this.cheese = cheese;return this;}public Builder toppings(String... toppings) {this.toppings.addAll(Arrays.asList(toppings));return this;}public Pizza build() {return new Pizza(this);}}@Overridepublic String toString() {return "Pizza{" +"dough='" + dough + '\'' +", sauce='" + sauce + '\'' +", cheese='" + cheese + '\'' +", toppings=" + toppings +'}';}
}

Builder类中,我们有一个构造函数,它接受面团和酱料作为参数。我们还有两个方法cheesetoppings,用于设置cheesetoppings属性。

最后,我们有一个build方法,它返回一个新的Pizza实例。

使用建造者模式,我们可以这样构建一个Pizza实例:

Pizza pizza = new Pizza.Builder("Thin Crust", "Tomato Sauce").cheese("Mozzarella").toppings("Pepperoni", "Mushrooms", "Onions").build();System.out.println(pizza);

控制台输出:

Pizza{dough='Thin Crust', sauce='Tomato Sauce', cheese='Mozzarella', toppings=[Pepperoni, Mushrooms, Onions]}

小结

Builder模式是为了创建一个复杂的对象,需要多个步骤完成创建,或者需要多个零件组装的场景,且创建过程中可以灵活调用不同的步骤或组件。


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

相关文章

轻量封装WebGPU渲染系统示例<37>- 多个局部点光源应用于非金属材质形成的效果(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/BasePbrMaterialMultiLights.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#xff1a; export class BasePbrMaterial…

解决“使用 CNKI 保存时发生错误。改为尝试用 DOI 保存。”【Bug Killed】

文章目录 简介解决办法跟新本地Zotero中茉莉花插件的非官方维护中文翻译器更新网页插件Zetero Connector中的Transtors 结语参考资料 简介 使用Chrome ➕ Zotero Connector保存中国知网&#xff08;CNKI&#xff09;的参考文献到本地的Zotero时无法正常保存&#xff0c;出现使…

设计师不能忽视的几个宝藏图标设计工具

在这个快速变化的时代&#xff0c;设计师对创新和实用工具的需求越来越大。这就要求我们及时跟上潮流&#xff0c;不断探索和尝试最新、最有价值的图标设计工具。只有这样&#xff0c;我们才能在竞争激烈的设计市场中脱颖而出。以下是我们精心挑选的2024年值得一试的图标设计工…

基于安卓android微信小程序的好物分享系统

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&a…

想自学软件测试?一般人我还是劝你算了吧。。。

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

SpringBoot:kaptcha生成验证码

GitHub项目地址&#xff1a;GitHub - penggle/kaptcha: kaptcha - A kaptcha generation engine. kaptcha介绍 kaptcha官网&#xff08;Google Code Archive - Long-term storage for Google Code Project Hosting.&#xff09;对其介绍如下&#xff0c; kaptcha十分易于安装…

DrugMAP: molecular atlas and pharma-information of all drugs学习

DrugMAP&#xff1a;所有药物的分子图谱和制药信息 - PMC (nih.gov) DrugMAP: the molecular atlas and pharma-information of drugs (idrblab.net) 构建了一个描述药物分子图谱和药物信息的新数据库&#xff08;DrugMAP&#xff09;。它提供了>30 000种药物/候选药物的相…

minio集群部署(k8s内)

一、前言 minio的部署有几种方式&#xff0c;分别是单节点单磁盘&#xff0c;单节点多磁盘&#xff0c;多节点多磁盘三种方式&#xff0c;本次部署使用多节点多磁盘的方式进行部署&#xff0c;minio集群多节点部署最低要求需要4个节点&#xff0c;集群扩容时也是要求扩容的节点…