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

用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();
}
  • 首先,我们定义了一个 Strategy trait,它包含一个 execute 方法,用于执行具体的策略。
  • 然后,我们实现了两个具体的策略类: ConcreteStrategyAConcreteStrategyB ,它们分别实现了 Strategy trait 的 execute 方法。
  • Context 结构体表示环境类,包含一个策略对象,并提供了设置策略和执行策略的方法。
  • main 函数中,我们创建了两个具体的策略对象,并使用 Context 类来执行不同的策略。

关注我,学习Rust不迷路!!

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

相关文章:

  • 面试题:说说JS的this指向问题?
  • ansible——roles 角色
  • GitHub上删除项目后,IDEA分享项目到GitHub提示Remote is already on GitHub
  • 【机器学习 | 决策树】利用数据的潜力:用决策树解锁洞察力
  • postgis mvt矢量切片 django drf mapboxgl
  • C语言编程工具软件推荐!
  • 单体架构和微服务架构的区别
  • python--local对象、flask上下文源码分析
  • 类文件一些内容
  • 28 Java练习——实现两个集合的交集和并集
  • ES6学习-Promise
  • 《Web安全基础》03. SQL 注入
  • 算法与数据结构(二十一)二叉树(纲领篇)
  • visio,word添加缺少字体,仿宋_GB2312、楷体_GB2312、方正小标宋简体等字体下载
  • Java爬虫
  • 海外应用商店优化实用指南之关键词
  • element+vue 之动态form
  • winform学习(3)-----Windows窗体应用和Windows窗体应用(.Net Framework)有啥区别?
  • 虚拟化中的中断机制:X86与PIC 8259A探索(上)
  • 软件外包开发语言排行榜
  • BI技巧丨利用OFFSET计算同环比
  • 整理mongodb文档:collation
  • 【LangChain】Prompts之Prompt templates
  • 【数字IC基础】时序违例的修复
  • 深度学习实战46-基于CNN的遥感卫星地图智能分类,模型训练与预测
  • Node.js-fs模块文件创建、删除、重命名、文件内容的写入、读取以及文件夹的相关操作
  • LIN协议总结
  • Redis BigKey案例
  • ThinkPHP v6.0.8 CacheStore 反序列化漏洞
  • Spring 事务详解(注解方式)