C#中的策略模式是一种行为型设计模式,它允许在运行时动态地选择算法的行为。该模式定义了一系列算法,将每个算法封装起来,并使它们可以互换。这使得算法的变化独立于使用它们的客户端。
在C#中,策略模式通常由一个抽象策略类和多个具体策略类组成。抽象策略类定义了一个接口,用于所有具体策略类实现。具体策略类实现了抽象策略类定义的接口,并提供了自己的算法实现。
客户端使用策略模式时,它将一个具体策略对象传递给一个上下文对象。上下文对象将使用该策略对象来执行其算法。如果需要更改算法,客户端可以简单地传递另一个具体策略对象给上下文对象。
// 抽象策略类
public interface IStrategy
{
void Execute();
}
// 具体策略类
public class ConcreteStrategyA : IStrategy
{
public void Execute()
{
Console.WriteLine("Executing strategy A");
}
}
public class ConcreteStrategyB : IStrategy
{
public void Execute()
{
Console.WriteLine("Executing strategy B");
}
}
// 上下文类
public class Context
{
private IStrategy _strategy;
public Context(IStrategy strategy)
{
_strategy = strategy;
}
public void ExecuteStrategy()
{
_strategy.Execute();
}
}
// 客户端代码
var context = new Context(new ConcreteStrategyA());
context.ExecuteStrategy(); // 输出 "Executing strategy A"
context = new Context(new ConcreteStrategyB());
context.ExecuteStrategy(); // 输出 "Executing strategy B"
在上面的示例中,抽象策略类是IStrategy
,具体策略类是ConcreteStrategyA
和ConcreteStrategyB
,上下文类是Context
。客户端代码创建一个上下文对象,并将具体策略对象传递给它。上下文对象使用该策略对象来执行其算法。如果需要更改算法,客户端可以简单地传递另一个具体策略对象给上下文对象。