首页 > 其他分享 >策略模式

策略模式

时间:2024-09-09 15:04:36浏览次数:1  
标签:Execute IStrategy 策略 void 模式 strategy ExecuteStrategy

策略模式是一种行为设计模式,它允许在运行时根据需要选择算法。这种模式定义了一系列算法,并使得这些算法在使用的时候可以相互替换。客户端可以根据不同的情况选择合适的策略来处理问题,而不需要修改具体使用策略的代码。

以下是一个简单的策略模式示例代码:

using System;

// 策略接口
interface IStrategy
{
    void Execute();
}

// 具体策略类A
class ConcreteStrategyA : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy A");
    }
}

// 具体策略类B
class ConcreteStrategyB : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy B");
    }
}

// 环境类
class Context
{
    private IStrategy strategy;

    public Context(IStrategy strategy)
    {
        this.strategy = strategy;
    }

    public void SetStrategy(IStrategy strategy)
    {
        this.strategy = strategy;
    }

    public void ExecuteStrategy()
    {
        strategy.Execute();
    }
}

class Program
{
    static void Main()
    {
        // 创建具体策略实例
        IStrategy strategyA = new ConcreteStrategyA();
        IStrategy strategyB = new ConcreteStrategyB();

        // 创建上下文对象,并设置具体策略A
        Context context = new Context(strategyA);
        context.ExecuteStrategy();

        // 切换具体策略为B,并执行
        context.SetStrategy(strategyB);
        context.ExecuteStrategy();
    }
}

在上面的代码中,我们定义了一个策略接口 IStrategy,和两个具体策略类 ConcreteStrategyA 和 ConcreteStrategyB,它们分别实现了策略接口的 Execute() 方法。然后定义了一个环境类 Context,它持有一个策略对象,并提供动态切换策略的方法 SetStrategy(),以及执行策略的方法 ExecuteStrategy()

在 Main() 方法中,我们首先创建具体策略实例A和B,然后创建一个环境对象并设置具体策略A,调用 ExecuteStrategy() 方法执行策略A。接着切换策略为B,并再次执行策略,从而演示了在运行时根据情况切换不同的策略。

策略模式可帮助程序更灵活地应对不同的需求,提高代码的可维护性和扩展性,同时避免了硬编码不同的算法逻辑。

标签:Execute,IStrategy,策略,void,模式,strategy,ExecuteStrategy
From: https://www.cnblogs.com/wuqihe/p/18404587

相关文章

  • 装饰器模式
    装饰器模式是一种结构型设计模式,它允许在不改变原有对象结构的情况下,动态地添加额外的功能或责任到对象上。这种模式通过创建包装类(装饰器类)来包裹原始类实例,并提供额外的功能。以下是一个简单的装饰器模式的示例代码:usingSystem;//抽象组件接口interfaceIComponent{......
  • 适配器模式
    适配器模式是一种结构型设计模式,用于将一个类的接口转换成另一个客户期望的接口。这种模式可以让原本由于接口不兼容而无法在一起工作的类能够协同工作。以下是一个简单的适配器模式的示例代码:usingSystem;//目标接口interfaceITarget{voidRequest();}//适配......
  • 责任链模式
    责任链模式是一种行为设计模式,它允许多个对象处理请求,而无需指定处理请求的具体处理者。请求沿着链传递,直到有一个对象处理它为止。这种模式允许将请求的发送者和接收者解耦,并使多个对象都有机会处理请求。以下是一个简单的责任链模式的示例代码:usingSystem;//抽象处理者a......
  • 案例分析:如何用设计模式优化性能14
    设计模式就是对常用开发技巧进行的总结,它使得程序员之间交流问题,有了更专业、便捷的方式。比如,我们在《02|理论分析:性能优化有章可循,谈谈常用的切入点》中提到,I/O模块使用的是装饰器模式,你就能很容易想到I/O模块的代码组织方式。事实上,大多数设计模式并不能增加程序的性......
  • 案例分析:如何用设计模式优化性能15
    设计模式就是对常用开发技巧进行的总结,它使得程序员之间交流问题,有了更专业、便捷的方式。比如,我们在《02|理论分析:性能优化有章可循,谈谈常用的切入点》中提到,I/O模块使用的是装饰器模式,你就能很容易想到I/O模块的代码组织方式。事实上,大多数设计模式并不能增加程序的性......
  • 案例分析:如何用设计模式优化性能8
    设计模式就是对常用开发技巧进行的总结,它使得程序员之间交流问题,有了更专业、便捷的方式。比如,我们在《02|理论分析:性能优化有章可循,谈谈常用的切入点》中提到,I/O模块使用的是装饰器模式,你就能很容易想到I/O模块的代码组织方式。事实上,大多数设计模式并不能增加程序的性......
  • 案例分析:如何用设计模式优化性能10
    设计模式就是对常用开发技巧进行的总结,它使得程序员之间交流问题,有了更专业、便捷的方式。比如,我们在《02|理论分析:性能优化有章可循,谈谈常用的切入点》中提到,I/O模块使用的是装饰器模式,你就能很容易想到I/O模块的代码组织方式。事实上,大多数设计模式并不能增加程序的性......
  • Prometheus的拉取模式与zabbix推送模式有何区别?各有什么优缺点?
    Prometheus的拉取模式与Zabbix的推送模式在监控数据收集和处理方式上存在显著区别。以下是它们的主要区别及各自的优缺点:1.数据收集模式Prometheus拉取模式:Prometheus定期从被监控的目标(如Exporter、应用程序等)主动拉取数据。每个目标都需要暴露一个HTTP接口,Prome......
  • Java--设计模式
    目录23种设计模式创建型模式结构型模式行为型模式设计模式的本质单例模式工厂模式定义解耦(对象使用过程+对象创建过程)分类简单工厂模式代理模式适配器模式外观模式策略模式23种设计模式创建型模式工厂模式(FactoryPattern)抽象工厂模式(AbstractFactoryPattern)单例模式(S......
  • selenium自动化检测方法总结 携带用户数据 绕过检测 无头模式 句柄切换
    1.selenium携带用户数据fromseleniumimportwebdriverfromselenium.webdriver.chrome.serviceimportServiceservice=Service(executable_path='chromedriver.exe')option=webdriver.ChromeOptions()user_data_dir=r'C:\Users\12501\AppData\Local......