当前位置: 首页 > news >正文

用Rust实现23种设计模式之建造者模式

当使用 Rust 实现建造者模式时,我们可以通过结构体和方法链来实现。建造者模式是一种创建型设计模式,它允许你按照特定的顺序构建复杂对象,同时使你能够灵活地构建不同的变体。下面是一个使用 Rust 实现建造者模式的示例,
在示例中,我们首先定义了要构建的复杂对象的结构体 Product ,它具有三个部分。

然后,我们定义了建造者结构体 Builder ,它具有与 Product 结构体相同的三个可选字段,表示正在构建的产品的各个部分。

在 Builder 结构体中,我们实现了一系列方法,用于设置产品的各个部分,并使用方法链的方式来方便地设置多个部分。

最后,我们在 build 方法中检查是否所有的部分都已设置,如果缺少某个部分,则会触发断言错误。然后,我们从建造者中获取各个部分,并使用它们构建一个 Product 实例。

在 main 函数中,我们创建了一个建造者实例,并使用方法链设置各个部分。最后,我们通过调用 build 方法来构建产品,并输出构建的产品的各个部分。

通过建造者模式,我们可以按照特定的顺序构建复杂对象,并且可以根据需求构建不同的变体,同时保持代码的可读性和可维护性。

// 定义要构建的复杂对象的结构体
struct Product {part1: String,part2: String,part3: String,
}// 定义建造者结构体
struct Builder {part1: Option<String>,part2: Option<String>,part3: Option<String>,
}impl Builder {// 创建一个新的建造者实例fn new() -> Self {Builder {part1: None,part2: None,part3: None,}}// 设置第一部分fn set_part1(&mut self, part1: String) -> &mut Self {self.part1 = Some(part1);self}// 设置第二部分fn set_part2(&mut self, part2: String) -> &mut Self {self.part2 = Some(part2);self}// 设置第三部分fn set_part3(&mut self, part3: String) -> &mut Self {self.part3 = Some(part3);self}// 构建产品fn build(&self) -> Product {// 检查是否所有的部分都已设置assert!(self.part1.is_some() && self.part2.is_some() && self.part3.is_some(),"部分缺失,无法构建产品");// 从建造者中获取各个部分let part1 = self.part1.clone().unwrap();let part2 = self.part2.clone().unwrap();let part3 = self.part3.clone().unwrap();// 返回构建的产品Product { part1, part2, part3 }}
}fn main() {// 创建建造者实例let mut builder = Builder::new();// 通过方法链设置各个部分builder.set_part1("Part 1".to_string()).set_part2("Part 2".to_string()).set_part3("Part 3".to_string());// 构建产品let product = builder.build();// 输出构建的产品println!("构建的产品:part1={}, part2={}, part3={}",product.part1, product.part2, product.part3);
}
http://www.lryc.cn/news/108193.html

相关文章:

  • 聚观早报 | 腾讯字节等企业驰援防汛救灾;新能源车7月销量单出炉
  • Crack:CAD Exchanger SDK 3.20 Web Toolkit 应用
  • 改造 ChatGPT-Next-Web 项目重新生成 Docker 镜像
  • git修改commit日志
  • Qt之qml和widget混合编程调用
  • 深度学习torch基础知识
  • 【JAVA】正则表达式是啥?
  • 网络安全之原型链污染
  • 【腾讯云Cloud Studio实战训练营】使用Cloud Studio迅捷开发一个3D家具个性化定制应用
  • 【计算机网络】第四章 网络层(一)
  • Elasticsearch删除文档
  • MySQL数据库如何实现AX规范
  • mac安装nvm
  • 使用 ckeditor gem
  • Windows环境下Node.js二进制版安装教程
  • Spring中的注解装配
  • 深度优先搜索|130, 200
  • go-resty
  • 香港服务器速度不稳定的原因有哪些
  • 企业架构NOSQL数据库之MongoDB
  • 鸟哥马哥共叙Linux发展
  • OpenCV中常用算子
  • Android 11.0 系统限制上网系列之iptables用IOemNetd实现app某个时间段禁止上网的功能实现
  • 【JavaSE】面向对象编程思想之继承
  • Golang make和new的区别
  • (前后端交互式)Ajax上传图片 + 更换背景图片
  • 自媒体常见玩法
  • 【react】react生命周期钩子函数:
  • CRM系统哪些功能可以个性化定制?
  • 51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验二 LED闪烁