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

用Rust实现23种设计模式之简单工厂

在 Rust 中,可以使用结构体和 trait 来实现工厂方法模式。工厂方法模式是一种创建型设计模式,通过定义一个创建对象的接口,让子类决定实例化哪个类。下面是一个简单的示例,展示了如何使用 Rust 实现工厂方法模式:

// 定义产品 trait
trait Product {fn operation(&self);
}
// 实现具体产品
struct ConcreteProductA;
impl Product for ConcreteProductA {fn operation(&self) {println!("ConcreteProductA operation");}
}
struct ConcreteProductB;
impl Product for ConcreteProductB {fn operation(&self) {println!("ConcreteProductB operation");}
}
// 定义工厂 trait
trait Factory {fn create_product(&self) -> Box<dyn Product>;
}
// 实现具体工厂
struct ConcreteFactoryA;
impl Factory for ConcreteFactoryA {fn create_product(&self) -> Box<dyn Product> {Box::new(ConcreteProductA)}
}
struct ConcreteFactoryB;
impl Factory for ConcreteFactoryB {fn create_product(&self) -> Box<dyn Product> {Box::new(ConcreteProductB)}
}
fn main() {// 使用具体工厂创建具体产品let factory_a: Box<dyn Factory> = Box::new(ConcreteFactoryA);let product_a = factory_a.create_product();product_a.operation();let factory_b: Box<dyn Factory> = Box::new(ConcreteFactoryB);let product_b = factory_b.create_product();product_b.operation();
}

在上述示例中,我们首先定义了一个 Product trait,它定义了产品的操作方法。然后,我们实现了两个具体产品 ConcreteProductA 和 ConcreteProductB ,它们都实现了 Product trait。

接下来,我们定义了一个 Factory trait,它定义了创建产品的方法。然后,我们实现了两个具体工厂 ConcreteFactoryA 和 ConcreteFactoryB ,它们分别实现了 Factory trait,并分别创建了 ConcreteProductA 和 ConcreteProductB 。

在 main 函数中,我们使用具体工厂创建具体产品,并调用产品的操作方法。

这样,通过工厂方法模式,我们可以在运行时动态选择具体工厂和产品,实现了创建对象的解耦和灵活性。

http://www.lryc.cn/news/108614.html

相关文章:

  • SpringBoot + minio实现分片上传、秒传、续传
  • logback 里面设置 自动删除3天之前的日志
  • 对于数据库查询索引和查字典索引的理解
  • git删除已经提交的大文件
  • 【数据分析】pandas 一
  • 题解 | #G.Gcd# 2023牛客暑期多校6
  • 苍穹外卖day10——订单状态定时处理(Spring Task)、来单提醒和客户催单(WebSocket)
  • 【多线程初阶】多线程案例之单例模式
  • 跨境选品怎么选?建议独立站卖家收下这份利基产品查找攻略!
  • [C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...
  • opencv-32 图像平滑处理-高斯滤波cv2.GaussianBlur()
  • Windows 环境Kubernetes安装
  • 自建类ChatGPT服务:本地化部署与远程访问教程
  • 常用SQL语句总结
  • arm交叉编译lmbench
  • ExtJs 7.7.0 下载方法与去除trial水印
  • Android11开发规划
  • 活动隔断在现在酒店运用的方式
  • Jenkins工具系列 —— 插件 钉钉发送消息
  • LeetCode 26 题:删除有序数组的重复项
  • 优雅地切换node版本(windows)
  • 反诈:吴明军、黄亮领导的WIN生活资金盘,大家警惕防范此类诈骗
  • shell、bash的关系及bash的特性(一)
  • 【问题随记】
  • Stable Diffusion AI绘画学习指南【常用模型,采样器介绍】
  • pycharm——漏斗图
  • RISC-V基础之浮点指令(包含实例)
  • 前端生成图片验证码怎么做?
  • 【Java】springboot框架 粮油质量溯源MES生产加工管理系统源码
  • macOS install redis遇到的bug(tar包,homebrew安装,守护进程redis.conf配置)