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

【Rust实现命令模式】

Rust实现命令模式

  • 什么是命令模式
  • 命令模式的应用场景
  • 命令模式的在Rust中的关系图
  • Rust中的命令模式代码示例
  • 运行结果
  • 总结


什么是命令模式

命令模式,即通过统一接口,如C#interface,亦或C++中的抽象类的=0方法,通过定义统一的接口,在定义不同的对象,为之接口实现具体的方法逻辑,再通过统一的管理类,将其存储在容器中如List或Deque等,在真正执行的时候按照顺序依次执行接口定义的方法就像执行命令一样。

命令模式的应用场景

  1. 常见的 Server数据库执行操作。
  2. Tracing 错误跟踪
  3. Server端在处理请求时。
  4. and so on

命令模式的在Rust中的关系图

命令模式的在Rust中的关系图

Rust中的命令模式代码示例

trait Execute {fn execute(&self) -> String;
}struct Login {username: String,password: String,
}impl Execute for Login {fn execute(&self) -> String {// Simulate login logicif self.username == "admin" && self.password == "secret" {format!("login admin logged in")} else {format!("login customer logged in")}}
}struct Logout {username: String,
}impl Execute for Logout {fn execute(&self) -> String {// Simulate logout logicformat!("{} Logout!", self.username)}
}struct Server {requests: Vec<Box<dyn Execute>>,
}impl Server {fn new() -> Self {Self { requests: vec![] }}fn add_request(&mut self, request: Box<dyn Execute>) {self.requests.push(request);}fn handlers(&self) -> Vec<String> {self.requests.iter().map(|req| req.execute()).collect()}
}fn main() {let mut server = Server::new();server.add_request(Box::new(Login {username: "admin".to_string(),password: "secret".to_string(),}));server.add_request(Box::new(Login {username: "bob".to_string(),password: "bob".to_string(),}));server.add_request(Box::new(Login {username: "men".to_string(),password: "men".to_string(),}));server.add_request(Box::new(Logout {username: "men".to_string(),}));server.add_request(Box::new(Logout {username: "bob".to_string(),}));let handlers = server.handlers();for handler in handlers {println!("{}", handler);}
}

运行结果

login admin logged in
login customer logged in
login customer logged in
men Logout!
bob Logout!

总结

命令模式较为常用,尤其实在后端开发中,了解掌握命令模式对服务器框架源码理解也有好处,模式不是必选项,而是锦上添花。

“我们从来都不清楚选择正确与否,只是努力的将选择变得正确.”


http://www.mrgr.cn/news/66696.html

相关文章:

  • 【数据结构与算法】第9课—数据结构之二叉树(链式结构)
  • 数据可视化seaborn
  • 《MySQL 8 DBA基础教程》第一章习题
  • 【OJ题解】C++实现反转字符串中的每个单词
  • 多态的内容
  • 任务:拟合曲面
  • 【JAVA】Java基础—基础语法:运算符(算数、关系、逻辑运算符)
  • C++面经(一)
  • 【Ajax】跨域
  • AIDD - 分子药物发现的计算方法现状总结
  • 基于springboot+vue实现的旅行社网站系统
  • 辐射发射测试新境界:深入解析TS-RadiMation套件多种操作方法(一)
  • ubuntu 22.04 server 安装 mysql 5.7.40 更改 datadir 目录 LTS
  • 表单同时提交多条记录的技术实现
  • awk工具使用
  • 【Python编程实例】-深入理解Python线程安全
  • 【2023工业图像异常检测代码复现】DDAD: 基于条件去噪扩散模型的异常检测方法
  • [MySQL]DCL语句
  • APP开发者如何选择合适的聚合平台?
  • 论文写作总结
  • 【FL0016】基于SpringBoot和微信小程序的超市售货管理平台
  • 基于51单片机的步进电机定时控制proteus仿真
  • 管家婆财贸ERP BB018.出库类单据批量生单
  • 如何使用java雪花算法在分布式环境中生成唯一ID?
  • 东胜物流软件 AttributeAdapter.aspx SQL 注入漏洞复现
  • PN-850光伏功率预测系统|新能源场站发电功率预测|光功率预测系统|光伏发电功率预测系统的组成方案|风电/光伏功率预测系统