【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 logic
        if 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 logic
        format!("{} 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);
    }
}

运行结果

rust 复制代码
login admin logged in
login customer logged in
login customer logged in
men Logout!
bob Logout!

总结

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

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

相关推荐
董员外1 小时前
RAG 系统进化论(八):Agentic RAG(智能体式 RAG),从回答问题到完成任务
人工智能·后端·设计模式
峥嵘life2 小时前
Android WiFi 热点 Channel 信道 和 Frequency 频率 转换总结
android·开发语言
wgego3 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
山峰哥4 小时前
数据库工程与SQL调优:从慢查询到秒级响应的实战之路
java·开发语言·数据库·sql·深度优先·启发式算法
wangjialelele4 小时前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化
Awna4 小时前
Golang 大小写可见性规范
开发语言·后端·golang
AI科技星5 小时前
曲率‑挠率与 $\boldsymbol{\omega/c}$ 的关系、精算验证及其物理意义
c语言·开发语言·线性代数·算法·决策树·机器学习·ai科技星
鹿角片ljp5 小时前
Java框架篇:Spring + SpringMVC + SpringBoot + MyBatis深度复习
java·开发语言
董员外6 小时前
RAG 系统进化论(七):Multimodal RAG(多模态 RAG),当知识存在于表格、图片和页面中
人工智能·后端·设计模式