用Rust实现23种设计模式之 策略模式
关注我,学习Rust不迷路!!
优点
- 灵活性:策略模式允许你在运行时动态地选择不同的算法或行为,而无需修改已有的代码。
- 可扩展性:通过添加新的策略类,你可以轻松地扩展策略模式的功能。
- 可维护性:策略模式将不同的算法或行为封装在各自的策略类中,使代码更易于理解、维护和测试。
使用场景
- 当有多个相关的类,它们之间的区别仅在于它们的行为或算法时,策略模式非常有用。
- 当你需要在运行时动态地选择不同的算法或行为时,策略模式可以提供一种简单而灵活的解决方案。
代码示例
下面是一个简单的例子,演示如何使用 Rust 实现策略模式。
// 策略 trait
trait Strategy {fn execute(&self);
}// 具体策略类 A
struct ConcreteStrategyA;impl Strategy for ConcreteStrategyA {fn execute(&self) {println!("Executing strategy A");}
}// 具体策略类 B
struct ConcreteStrategyB;impl Strategy for ConcreteStrategyB {fn execute(&self) {println!("Executing strategy B");}
}// 环境类
struct Context {strategy: Box<dyn Strategy>,
}impl Context {fn new(strategy: Box<dyn Strategy>) -> Self {Context { strategy }}fn set_strategy(&mut self, strategy: Box<dyn Strategy>) {self.strategy = strategy;}fn execute_strategy(&self) {self.strategy.execute();}
}// 使用示例
fn main() {let strategy_a = Box::new(ConcreteStrategyA);let strategy_b = Box::new(ConcreteStrategyB);let mut context = Context::new(strategy_a);context.execute_strategy();context.set_strategy(strategy_b);context.execute_strategy();
}
- 首先,我们定义了一个
Strategytrait,它包含一个execute方法,用于执行具体的策略。 - 然后,我们实现了两个具体的策略类:
ConcreteStrategyA和ConcreteStrategyB,它们分别实现了Strategytrait 的execute方法。 Context结构体表示环境类,包含一个策略对象,并提供了设置策略和执行策略的方法。- 在
main函数中,我们创建了两个具体的策略对象,并使用Context类来执行不同的策略。
关注我,学习Rust不迷路!!
相关文章:
用Rust实现23种设计模式之 策略模式
关注我,学习Rust不迷路!! 优点 灵活性:策略模式允许你在运行时动态地选择不同的算法或行为,而无需修改已有的代码。可扩展性:通过添加新的策略类,你可以轻松地扩展策略模式的功能。可维护性&a…...
面试题:说说JS的this指向问题?
1、this永远指向一个对象; 2、this的指向完全取决于函数调用的位置; 可以借鉴这篇文章,说的很详细(点击) 总结: 1、 以方法的形式调用时, this 是调用方法的对象; 2、绑定事件函…...
ansible——roles 角色
一、概述 1.roles角色简介 roles用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。 简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置…...
GitHub上删除项目后,IDEA分享项目到GitHub提示Remote is already on GitHub
文章目录 一、错误信息二、解决方法1.删除GitHub上的项目2.找到项目里的.git隐藏文件3.找到config文件4.打开config文件,删除[remote "git-test"]及下面两行内容5.继续使用IDEA分享项目到GitHub即可 一、错误信息 二、解决方法 1.删除GitHub上的项目 2.…...
【机器学习 | 决策树】利用数据的潜力:用决策树解锁洞察力
🤵♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...
postgis mvt矢量切片 django drf mapboxgl
postgis mvt矢量切片 django drf mapboxgl 目录 0.前提 1.sql代码 2.django drf后端服务代码 3.具体的应用(整体代码) 4.参考 0.前提 [1] 静态的矢量切片可以采用 tippecanoe 生成,nginx代理,这种数据是不更新的;…...
C语言编程工具软件推荐!
1、VS(Visual Studio) [VS是目前最受欢迎的适用于Windows平台应用程序的综合开发环境,由于大多数同学使用的都是Windows操作系统,因此VS非常适合大家。在日常课堂和考试中,我们使用的VS2010支持多种不同的编程语言,VS2010最初支持…...
单体架构和微服务架构的区别
文章目录 一、单体架构的定义1. 单体架构的优点:2. 单体架构的缺点: 二、微服务架构的定义1. 微服务架构的优点:2. 微服务架构的缺点: 三、单体架构VS微服务架构1. 区别:1.1 架构规模:1.2 依赖关系…...
python--local对象、flask上下文源码分析
一、local对象 背景: 多线成并发操作一个变量,会导致数据错乱,可以使用互斥锁加锁处理数据不安全的情况 (临界区) 解决: 使用local对象处理,多个线程操作的变量是local对象,就不会…...
类文件一些内容
1、类加载 将类的字节码加载到JVM中,并转换为可以被JVM运行的数据结构的过程 类文件结构...
28 Java练习——实现两个集合的交集和并集
求并集的思路:假设传入的是一个ArrayList对象,求并集的时候直接调用其中一个List集合的addAll方法将另一个集合合并过来,而List的特性是有序,重复的。因此,使用Set接口的无序不可重复的特性,把Collection对…...
ES6学习-Promise
Promise 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。 语法上: Promise 是一个对象,从它可以获取异步操作的消息。 特点 对象的状态不受外界影响。Promise 对象戴白哦一个异步操…...
《Web安全基础》03. SQL 注入
web 1:简要 SQL 注入2:MySQL 注入2.1:信息获取2.2:跨库攻击2.3:文件读写2.4:常见防护 3:注入方法3.1:类型方法明确3.2:盲注3.3:编码3.4:二次注入3…...
算法与数据结构(二十一)二叉树(纲领篇)
备注:本文旨在通过 labuladong 的二叉树(纲领篇)理解框架思维,用于个人笔记及交流学习,版权归原作者 labuladong 所有; 我刷了这么多年题,浓缩出二叉树算法的一个总纲放在这里,也许…...
visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载
一. 内容简介 visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载 二. 软件环境 2.1 visio 三.主要流程 3.1 下载字体 http://www.downza.cn/ 微软官方给的链接好多字体没有,其他好多字体网站,就是给你看个样式ÿ…...
Java爬虫
什么是爬虫? 通过请求,从而去获取互联网上的各种数据与资源,如文字,图片,视频。 本质上原理都一样,都是通过api请求,然后服务器就会发给你信息,然后你再根据这些信息去提取你想要的…...
海外应用商店优化实用指南之关键词
和SEO一样,关键词是ASO中的一个重要因素。就像应用程序标题一样,在Apple App Store和Google Play中处理应用程序关键字的方式也有所不同。 关键词研究。 对于Apple,我们的所有关键词只能获得100个字符,Google Play没有特定的关键…...
element+vue 之动态form
1.页面部分 <div v-for"(item,index) in formList" :key"index"><el-col :span"6" v-if"item.inputType0"><el-form-item :label"item.conditionName" :prop"item.conditionCode":rules"{req…...
winform学习(3)-----Windows窗体应用和Windows窗体应用(.Net Framework)有啥区别?
1.模板选择 在学习winform的时候总是会对这两个应用不知道选择哪个?而且在学习的时候也没有具体的说明 首先说一下我是在添加控件的时候出现了以下问题 对于使用了Windows窗体应用这个模板的文件在工具箱中死活不见控件。 在转换使用了Windows窗体应用(.NET Fram…...
虚拟化中的中断机制:X86与PIC 8259A探索(上)
本系列深入探讨虚拟化中断技术,从X86架构和PIC 8259A的基础,到IOAPIC和MSI的编程,再到MSIX技术与Broiler设备的实战应用,全面剖析中断虚拟化的前沿进展。 X86 中断机制 在计算机架构中,CPU 运行的速度远远大于外设…...
Outfit字体全面解析与实战指南:现代设计的无衬线字体解决方案
Outfit字体全面解析与实战指南:现代设计的无衬线字体解决方案 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts Outfit字体作为一款现代开源无衬线字体,以其完整的9种字重体…...
别再只用协同过滤了!聊聊Spark电商推荐系统中的‘冷启动’与实时推荐那些事儿
突破传统推荐瓶颈:Spark电商系统中的冷启动与实时推荐实战解析 1. 电商推荐系统的演进与挑战 在数字化消费时代,推荐系统已成为电商平台的核心竞争力。从早期的简单规则推荐到如今的深度学习模型,推荐技术经历了三次重要迭代: 第一…...
UE5 DynamicMesh实战:从高度图到程序化模型生成
1. 初识UE5 DynamicMesh组件 DynamicMesh是虚幻引擎5引入的一种革命性网格组件,它彻底改变了传统静态网格的工作流程。我第一次接触这个功能时,简直像发现了新大陆——原来在编辑器里就能直接修改网格结构,不用反复导出导入模型文件了。 与传…...
C++常量表达式constexpr在编译期计算与模板元编程中的结合
C常量表达式constexpr与模板元编程的结合为现代C带来了前所未有的编译期计算能力,这种技术组合不仅提升了程序性能,还增强了代码的表达能力。在C11引入constexpr后,开发者能够在编译期完成复杂的计算,而模板元编程则提供了类型操作…...
3分钟搞定Blender VRM插件:从零开始创建你的虚拟角色
3分钟搞定Blender VRM插件:从零开始创建你的虚拟角色 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.0 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender 还在为Blender与VRM格式的…...
OpenClaw多模型路由策略:混合Phi-3-vision-128k-instruct与文本模型的实践
OpenClaw多模型路由策略:混合Phi-3-vision-128k-instruct与文本模型的实践 1. 为什么需要多模型路由? 去年夏天,我尝试用OpenClaw自动化处理团队的技术文档时,遇到了一个典型问题:当文档中包含大量截图和图表时&…...
教育资源数字化转型:电子课本下载工具的技术赋能与应用实践
教育资源数字化转型:电子课本下载工具的技术赋能与应用实践 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目…...
Win11Debloat:简单三步彻底优化Windows系统,告别卡顿与隐私泄露
Win11Debloat:简单三步彻底优化Windows系统,告别卡顿与隐私泄露 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes…...
JPEGView:Windows平台轻量级图像工具的性能革命
JPEGView:Windows平台轻量级图像工具的性能革命 【免费下载链接】jpegview Fork of JPEGView by David Kleiner - fast and highly configurable viewer/editor for JPEG, BMP, PNG, WEBP, TGA, GIF and TIFF images with a minimal GUI. Basic on-the-fly image pr…...
如何在Windows中快速读取Linux分区?Ext2Read完整教程指南
如何在Windows中快速读取Linux分区?Ext2Read完整教程指南 【免费下载链接】ext2read A Windows Application to read and copy Ext2/Ext3/Ext4 (With LVM) Partitions from Windows. 项目地址: https://gitcode.com/gh_mirrors/ex/ext2read 你是否曾经遇到过…...
