【GoF23种设计模式】01_建造者模式

news/2024/11/30 1:46:37/

文章目录

  • 前言
  • 一、基本概念
  • 二、使用步骤


前言

提示:设计者模式有利于提高开发者的编程效率和代码质量:

GoF(Gang of Four,四人帮)设计模式由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者合著,介绍了23种经典的设计模式
分为三大类:创建型模式、结构型模式和行为型模式。


提示:以下是本篇文章正文内容,下面案例可供参考

一、基本概念

建造者模式是一种创建型设计模式,它允许你一步一步构造对象,并且只有在所有必要的部分都准备好之后才返回最终的对象。

这种模式非常有用,特别是在构建复杂的对象时,可以避免大量的构造函数参数,同时也使得代码更加清晰易读。

二、使用步骤

下面是一个简单的例子,展示如何使用建造者模式来创建一个Meal对象,这个对象可能包含多种食物和饮料。

首先定义 Meal 类:

java">public class Meal {private String mainCourse;private String sideDish;private String drink;private String dessert;// 私有构造器,防止直接实例化private Meal(MealBuilder builder) {this.mainCourse = builder.mainCourse;this.sideDish = builder.sideDish;this.drink = builder.drink;this.dessert = builder.dessert;}@Overridepublic String toString() {return "Meal{" +"mainCourse='" + mainCourse + '\'' +", sideDish='" + sideDish + '\'' +", drink='" + drink + '\'' +", dessert='" + dessert + '\'' +'}';}// 内部静态类,作为建造者public static class MealBuilder {private String mainCourse;private String sideDish;private String drink;private String dessert;public MealBuilder mainCourse(String mainCourse) {this.mainCourse = mainCourse;return this;}public MealBuilder sideDish(String sideDish) {this.sideDish = sideDish;return this;}public MealBuilder drink(String drink) {this.drink = drink;return this;}public MealBuilder dessert(String dessert) {this.dessert = dessert;return this;}// 构建最终的 Meal 对象public Meal build() {return new Meal(this);}}
}

使用 MealBuilder 创建 Meal 对象:

java">public class Client {public static void main(String[] args) {// 使用建造者模式创建 Meal 对象Meal meal = new Meal.MealBuilder().mainCourse("牛排").sideDish("薯条").drink("可乐").dessert("冰淇淋").build();System.out.println(meal);}
}

在这个例子中,Meal 类是最终要构建的对象,而 MealBuilder 是用来构建 Meal 实例的内部类。

通过调用 MealBuilder 的方法(如 mainCourse 和 sideDish),我们可以逐步设置 Meal 的各个属性。

最后,当我们调用 build() 方法时,就会创建一个新的 Meal 对象。

总结:
这种方式的好处在于,即使 Meal 类有很多属性,我们也不需要为每个组合都提供一个构造函数,而是可以根据需要逐步设置属性,这使得代码更加灵活和易于维护。


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

相关文章

《掩码语言模型(Masked Language Model, MLM)》

一、引言 在自然语言处理领域,掩码语言模型(Masked Language Model, MLM)是一种重要的预训练方法。它通过随机掩码输入文本中的一部分单词,然后让模型预测被掩码的单词,从而学习语言的语义和语法知识。MLM 已经在许多自…

vue2面试题11|[2024-11-25]

1.vue源码-模版解析 <!DOCTYPE html> <html> <head><title></title> </head> <body><div idapp><h1> {{ str }} </h1>{{ str }} </div></body><script type"text/javascript" srcvue.js…

SM3 Sm4加密算法

一、概述 1、SM3是一种分组消息摘要算法&#xff0c;用于生成数据的哈希值&#xff08;消息摘要&#xff09;&#xff0c;而非直接加密数据。 1.1、 应用场景 数据完整性校验&#xff1a;验证数据在传输或存储过程中是否被篡改。 数字签名&#xff1a;与SM2等算法结合使用&am…

02.ES6(2)

2.10、rest参数 ES6 引入 rest 参数&#xff0c;用于获取函数的实参&#xff0c;用来代替 arguments <script>// ES5 获取实参的方式/* function date(){console.log(arguments);}date(大白,二黑,三孩); */// rest 参数/* function date(...args) {console.log(args)…

数据库期末复习题库

1. Mysql日志功能有哪些? 记录日常操作和错误信息&#xff0c;以便了解Mysql数据库的运行情况&#xff0c;日常操作&#xff0c;错误信息和进行相关的优化。 2. 数据库有哪些备份方法 完全备份&#xff1a;全部都备份一遍表备份&#xff1a;只提取数据库中的数据&#xff0…

最新特性MCP协议客户端复现

参考官方文档 https://modelcontextprotocol.io/quickstart1、客户端 2、 安装uv&#xff0c;一键安装命令&#xff1a; 先使用这个开放策略&#xff0c;否则直接安装失败 &#xff08;我是win11&#xff0c;再powershell&#xff09; Set-ExecutionPolicy RemoteSigned -Sco…

Spring Boot 开发环境搭建详解

下面安装spring boot的详细步骤&#xff0c;涵盖了从安装 JDK 和 Maven 到创建和运行一个 Spring Boot 项目的全过程。 文章目录 1. 安装 JDK步骤 1.1&#xff1a;下载 JDK步骤 1.2&#xff1a;安装 JDK步骤 1.3&#xff1a;配置环境变量 2. 安装 Maven步骤 2.1&#xff1a;下载…

Could not load library libnvrtc.so.11.2. Error: libnvrtc.so.11.2

目录 2. 解决方案 未测试 解决方法 测试ok Could not load library libnvrtc.so.11.2. Error: libnvrtc.so.11.2 torch运行时报错 2. 解决方案 未测试 去PyTorch官网重新下载安装pytorch=2.2。并且看起来pytorch=2.1和pytorch=2.3均不太行。 参考自:Fine-tuning on a V100 …