策略模式

策略模式 (Strategy Pattern)

策略模式是一种行为设计模式,它允许在运行时选择算法的实现。它通过将算法封装在独立的类中,使得算法可以互相替换,避免了使用条件语句的需求。

介绍#

策略模式定义了一系列算法,并将每个算法封装起来,使得它们可以相互替换。策略模式使得算法可以独立于使用它们的客户端变化。

UML 类图#

        +------------------------------+
        |      Context                 |
        |------------------------------|
        | - strategy:Strategy          |
        | + SetStrategy(Strategy):void |
        | + ExecuteStrategy():void     |
        +------------------------------+
                      |
                      |
                      v
            +---------------------+
            |      Strategy       |
            |---------------------|
            | + Execute():void    |
            +---------------------+
                      |
                      |
            +---------+----------+
            |                    |
            v                    v
+---------------------+  +---------------------+
|   ConcreteStrategyA |  |  ConcreteStrategyB  |
|---------------------|  |---------------------|
| + Execute():void    |  | + Execute():void    |
+---------------------+  +---------------------+

示例代码#

策略接口#

// IStrategy.cs
public interface IStrategy
{
    void Execute();
}

具体策略#

// ConcreteStrategyA.cs
public class ConcreteStrategyA : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("执行策略 A");
    }
}

// ConcreteStrategyB.cs
public class ConcreteStrategyB : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("执行策略 B");
    }
}

上下文类#

// Context.cs
public class Context
{
    private IStrategy _strategy;

    public void SetStrategy(IStrategy strategy)
    {
        _strategy = strategy;
    }

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

客户端代码#

// Program.cs
using System;

class Program
{
    static void Main()
    {
        Context context = new Context();

        // 使用策略 A
        context.SetStrategy(new ConcreteStrategyA());
        context.ExecuteStrategy();

        // 切换到策略 B
        context.SetStrategy(new ConcreteStrategyB());
        context.ExecuteStrategy();
    }
}

总结#

策略模式通过将算法封装在独立的类中,消除了条件语句的使用,使得算法可以独立于使用它们的客户端变化。这种模式提供了一种灵活的设计方式,使得程序更容易扩展和维护。

作者:zhuhy

出处:https://www.cnblogs.com/AILove/p/18217205

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   zhuhy  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示