当前位置: 首页 > 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 函数中,我们使用具体工厂创建具体产品,并调用产品的操作方法。

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

相关文章:

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

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

SpringBoot + minio实现分片上传、秒传、续传

什么是minio MinIO是一个基于Go实现的高性能、兼容S3协议的对象存储。它采用GNU AGPL v3开源协议&#xff0c;项目地址是https://github.com/minio/minio。 引用官网&#xff1a; MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储。它与Amazon S3云存储服务兼容…...

logback 里面设置 自动删除3天之前的日志

目录 1 实现 1 实现 要实现达到一定大小后将日志文件压缩&#xff0c;并删除三天前的日志数据&#xff0c;可以结合使用 SizeAndTimeBasedRollingPolicy 滚动策略和 DeleteOlderThan 选项来配置。下面是一个示例配置&#xff0c;实现日志文件达到一定大小后进行滚动和压缩&…...

对于数据库查询索引和查字典索引的理解

之前面试问过我对于数据库索引的理解&#xff0c;这个问题不是具体的问题太宽泛&#xff0c;面试官也没进行引导&#xff0c;我不知道怎么回答&#xff0c;下面是结合查字典进行理解。 查字典 拿查字典举例&#xff0c;知道一个字怎么写但是不知道具体的意思以及发音&#xff…...

git删除已经提交的大文件

当你不小心把一个巨大的二进制文件提交到git仓库的时候&#xff0c;此时删除再提交也没有用了&#xff0c;大文件已经在仓库中留底了。另外比如需要删除某个需要保密的文件&#xff0c;都是相同的解决办法。 我本来想着把dll放在三方库里面提交到仓库里&#xff0c;省得在不同…...

【数据分析】pandas 一

目录 一&#xff0c;pandas简介&#xff1a; 二&#xff0c;pandas数据结构Series简介&#xff1a; 2.1 data为ndarray 2.2 data为字典 三&#xff0c;Serise切片操作&#xff1a; 四&#xff0c;Series性质&#xff1a; 4.1 Series类似于numpy,字典 4.2 矢量化操作和标…...

题解 | #G.Gcd# 2023牛客暑期多校6

G.Gcd 数论 题目大意 给定一个包含两个非负数的初始集合 S { x , y } S\{x,y\} S{x,y} 每次操作可以选定其中不相等的两个数 a , b a,b a,b &#xff0c;并将 a − b a-b a−b 或 g c d ( a , b ) gcd(a,b) gcd(a,b) 置入集合 S S S &#xff0c;其中 g c d ( 0 , a …...

苍穹外卖day10——订单状态定时处理(Spring Task)、来单提醒和客户催单(WebSocket)

预期效果 对于超时没处理的需要定时程序处理。基于SpringTask实现。 来单提醒和客户催单。基于WebSocket实现。 Spring Task 介绍 Cron表达式 周几通常不能和日一起指定。 cron表达式在线生成器 在线Cron表达式生成器 入门案例 创建定时任务类 /*** 定义定时任务类*/ Slf4j…...

【多线程初阶】多线程案例之单例模式

文章目录 前言1. 什么是单例模式2. 饿汉模式3. 懒汉模式 --- 单线程版4. 懒汉模式 --- 多线程版5. 懒汉模式 --- 多线程改进版总结 前言 本文主要给大家讲解多线程的一个重要案例 — 单例模式. 关注收藏, 开始学习吧&#x1f9d0; 1. 什么是单例模式 单例模式是一种很经典的…...

跨境选品怎么选?建议独立站卖家收下这份利基产品查找攻略!

跨境电商平台现在可谓是火热发展中&#xff0c;独立站出海风口&#xff0c;其实选择的机会还真不少&#xff0c;相比国内电商的发展势头&#xff0c;看得出来&#xff0c;未来跨境电商的大门&#xff0c;对你而言&#xff0c;敞开着。选品这事儿&#xff0c;就像你上战场前挑选…...

[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍...

项目背景 Boost库是C中一个非常重要的开源库. 它实现了许多C标准库中没有涉及的特性和功能, 一度成为了C标准库的拓展库. C新标准的内容, 很大一部分脱胎于Boost库中. Boost库的高质量代码 以及 提供了更多实用方便的C组件, 使得Boost库在C开发中会被高频使用 为方便开发者学…...

opencv-32 图像平滑处理-高斯滤波cv2.GaussianBlur()

在进行均值滤波和方框滤波时&#xff0c;其邻域内每个像素的权重是相等的。在高斯滤波中&#xff0c;会将中心点的权重值加大&#xff0c;远离中心点的权重值减小&#xff0c;在此基础上计算邻域内各个像素值不同权重 的和。 基本原理 在高斯滤波中&#xff0c;卷积核中的值不…...

Windows 环境Kubernetes安装

目录 前言 安装 Docker 安装 Kubernetes Windows 安装 kubectl 介绍 安装 开启 Kubernetes 前言 Docker作为当前最流行的容器化平台&#xff0c;为Kubernetes提供了强大的容器化技术基础。Kubernetes与Docker的结合&#xff0c;使得容器化应用程序在大规模集群中得以简…...

自建类ChatGPT服务:本地化部署与远程访问教程

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

常用SQL语句总结

SQL语句 文章目录 SQL语句1 SQL语句简介2 DQL&#xff08;数据查询语句&#xff09;3 DML&#xff08;数据操纵语句&#xff09;4 DDL&#xff08;数据定义语句&#xff09;5 DCL&#xff08;数据控制语句&#xff09;6 TCL&#xff08;事务控制语句&#xff09; 1 SQL语句简介…...

arm交叉编译lmbench

一、下载lmbench www.bitmover.com/lmbench 官网下载&#xff0c;http://www.bitmover.com/lmbench/lmbench3.tar.gz 我没有下载下来&#xff0c;找的别人的百度云下载 链接: https://pan.baidu.com/s/1tGo1clCqY-jQPN8G1eWSsg 提取码: f6jd 二、修改makefile 修改三个文件…...

ExtJs 7.7.0 下载方法与去除trial水印

背景 最近发现Sencha ExtJs发布了ExtJs7.7.0版本&#xff0c;立刻下载了SDK包&#xff0c;许多朋友不知如何下载&#xff0c;如何去除右上角的trial水印。本文讲下相关下载技巧与方法。 下载SDK 首先需要申请试用&#xff0c;申请地址如下&#xff0c;需要注意可能需要梯子&…...

Android11开发规划

文章目录 规划总结规划 提示:这里可以添加本文要记录的大概内容: 从本文开始,会介绍如何移植瑞芯微提供的Android11源码到自己的RK3568的板子上 下面是整个Android开发的规划: 包括以下部分: … 一、移植部分 下载编译瑞芯微提供的源码 瑞芯微原厂源码目录介绍...

活动隔断在现在酒店运用的方式

活动隔断是一种在酒店内部划分空间的方式&#xff0c;用于实现不同活动的隔离和隐私。现代酒店常用的活动隔断方式有以下几种&#xff1a; 1. 固定隔断&#xff1a;使用墙体、固定屏风或者板材等材料&#xff0c;将空间划分为不同的房间或区域。这种方式常用于划分客房、会议室…...

Jenkins工具系列 —— 插件 钉钉发送消息

文章目录 安装插件 Ding TalkJenkins 配置钉钉机器人钉钉APP配置项目中启动钉钉通知功能 安装插件 Ding Talk 点击 左侧的 Manage Jenkins —> Plugins ——> 左侧的 Available plugins Jenkins 配置钉钉机器人 点击 左侧的 Manage Jenkins &#xff0c;拉到最后 钉…...

运算放大器电流流向的3个常见误区,硬件工程师必看避坑指南

运算放大器电流流向的3个常见误区&#xff0c;硬件工程师必看避坑指南 在硬件电路设计中&#xff0c;运算放大器&#xff08;Op-Amp&#xff09;作为模拟电路的核心器件&#xff0c;其电流流向的理解直接影响电路性能与稳定性。然而&#xff0c;即使是经验丰富的工程师&#xf…...

Python异步爬虫如何应对封IP_结合asyncio与代理池实现轮询请求

asyncio.run()仅适用于单次顶层协程启动&#xff0c;爬虫主循环需用run_until_complete或while Truesleep&#xff1b;代理接入需区分HTTP/HTTPS/SOCKS5&#xff0c;配合Connector限流、Semaphore控制并发&#xff0c;并通过响应头精准识别封禁后分级降级。asyncio.run() 里直接…...

TensorRT 8.2.5 部署实战:从环境配置到模型推理的完整指南

1. 环境准备&#xff1a;搭建TensorRT 8.2.5的温床 在Ubuntu 20.04上部署TensorRT就像给赛车装配高性能引擎&#xff0c;首先要确保车库&#xff08;系统环境&#xff09;符合标准。我遇到过不少开发者卡在环境配置这一步&#xff0c;往往是因为CUDA版本不匹配这类"低级错…...

Win11 Docker Desktop 迁移虚拟硬盘文件存储位置

一、wsl虚拟硬盘文件路径 C:\Users\admin\AppData\Local\Docker\wsl C:\Users\admin\AppData\Local\Docker\wsl\disk\docker_data.vhdx C:\Users\admin\AppData\Local\Docker\wsl\main\ext4.vhdx 二、新建新的磁盘映像位置 E:\wsl2&#xff08;选择这个&#xff09; E:\ws…...

HsMod:55+实用功能重塑你的炉石传说体验

HsMod&#xff1a;55实用功能重塑你的炉石传说体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 想要告别枯燥的手动开包&#xff1f;厌倦了千篇一律的游戏界面&#xff1f;渴望更高效的…...

从离群值到平坦线:FlatQuant 如何重塑 LLM 的 4-bit 量化格局

1. 当大模型遇上4-bit量化&#xff1a;离群值引发的技术困局 第一次尝试在RTX 3090上跑70B参数的LLaMA-3模型时&#xff0c;显存直接爆了——这个场景相信很多开发者都深有体会。模型量化技术就像给大模型"瘦身"的魔法&#xff0c;而4-bit量化&#xff08;W4A4&#…...

无感FOC电机三相控制高速吹风筒方案 FU6812L+FD2504S 电压AC220V 功率80W

无感FOC电机三相控制高速吹风筒方案 FU6812LFD2504S 电压AC220V 功率80W 最高转速20万RPM 方案优势&#xff1a;响应快、效率高、噪声低、成本低 控制方式&#xff1a;三相电机无感FOC 闭环方式&#xff1a;功率闭环&#xff0c;速度闭环 调速接口&#xff1a;按键调试 提供原理…...

终极模组管理指南:如何用AML启动器轻松解决XCOM 2模组冲突问题

终极模组管理指南&#xff1a;如何用AML启动器轻松解决XCOM 2模组冲突问题 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_m…...

终极指南:5步掌握Wallpaper Engine资源解包与格式转换秘籍 [特殊字符]

终极指南&#xff1a;5步掌握Wallpaper Engine资源解包与格式转换秘籍 &#x1f680; 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 还在为Wallpaper Engine的PKG文件头疼吗&#…...

别再只做压力测试了:大模型工程化必须落地的5类混沌实验(附Prometheus+OpenTelemetry可观测性埋点规范)

第一章&#xff1a;别再只做压力测试了&#xff1a;大模型工程化必须落地的5类混沌实验&#xff08;附PrometheusOpenTelemetry可观测性埋点规范&#xff09; 2026奇点智能技术大会(https://ml-summit.org) 大模型服务在生产环境中暴露出的故障模式远超传统API服务——token流…...