用Rust实现23种设计模式之 策略模式

这篇具有很好参考价值的文章主要介绍了用Rust实现23种设计模式之 策略模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

优点

  • 灵活性:策略模式允许你在运行时动态地选择不同的算法或行为,而无需修改已有的代码。
  • 可扩展性:通过添加新的策略类,你可以轻松地扩展策略模式的功能。
  • 可维护性:策略模式将不同的算法或行为封装在各自的策略类中,使代码更易于理解、维护和测试。

使用场景

  • 当有多个相关的类,它们之间的区别仅在于它们的行为或算法时,策略模式非常有用。
  • 当你需要在运行时动态地选择不同的算法或行为时,策略模式可以提供一种简单而灵活的解决方案。

代码示例

下面是一个简单的例子,演示如何使用 Rust 实现策略模式。文章来源地址https://www.toymoban.com/news/detail-628780.html

// 策略 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不迷路!!

到了这里,关于用Rust实现23种设计模式之 策略模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Gof23设计模式之责任链模式

    责任链模式又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 职责链模式主要包含以下角色: 抽象处理者(

    2024年02月09日
    浏览(38)
  • Gof23设计模式之模板方法模式

    定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 模板方法(Template Method)模式包含以下主要角色: 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个

    2024年02月13日
    浏览(56)
  • Gof23设计模式之建造者模式

    建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和

    2024年02月11日
    浏览(49)
  • Gof23设计模式之桥接外观模式

    又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 外观(Facade)模式包含

    2024年02月15日
    浏览(47)
  • Gof23设计模式之单例模式(完整)

    单例模式(Singleton pattern)是Java中最简单的设计模式之一。这种设计模式属于创建型模型,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访

    2024年02月10日
    浏览(53)
  • GOF 23 种设计模式应用场景分析

    本文看下GOF 23 种设计模式应用场景,详细的还是通过文章给出参考链接学习下。 参考这篇文章 。 有几种产品需要创建,比如创建红苹果,青苹果,绿苹果,这些对象通过一个对象就可以。 参考这篇文章 。 有几种产品需要创建,但是每种产品不能简单的通过一个对象来表示

    2024年02月16日
    浏览(46)
  • 创建型模式 (Creational Patterns) 玄子Share 设计模式 GOF 全23种 + 七大设计原则

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWLAOFtO-1691793071647)(./assets/%E7%8E%84%E5%AD%90Share%20%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%20GOF%20%E5%85%A823%E7%A7%8D%20+%20%E4%B8%83%E5%A4%A7%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.png)] GoF(Gang of Four)是四位计算机科学家(Erich Gamma、Ri

    2024年02月12日
    浏览(35)
  • 用Rust实现23种设计模式之 代理模式

    代理模式是一种结构型设计模式,它允许通过代理对象来控制对真实对象的访问。以下是代理模式的优点和使用场景: 控制访问 :代理模式可以控制对真实对象的访问,可以在访问前后进行一些额外的操作,如权限验证、缓存等。 解耦和灵活性 :代理模式将客户端与真实对

    2024年02月14日
    浏览(47)
  • 用Rust实现23种设计模式之原型模式

    在 Rust 中,原型模式可以通过实现 Clone trait 来实现。原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需显式地使用构造函数。下面是一个使用 Rust 实现原型模式的示例,带有详细的代码注释和说明: 在上述示例中,我们首先定义了一个原型对

    2024年02月14日
    浏览(34)
  • 用Rust实现23种设计模式之 外观模式

    外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。以下是外观模式的优点和使用场景: 简化客户端代码 :外观模式通过提供一个简化的接口,隐藏了子系统的复杂性,使得客户端代码更加简洁和易于使用。 解耦和灵活性 :外观模式

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包