Loading

策略模式

策略模式 (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();
    }
}

总结

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

posted @ 2024-05-28 10:00  zhuhy  阅读(21)  评论(0编辑  收藏  举报