介绍:
策略模式是一种行为设计模式,它允许在运行时选择算法的行为。它定义了一系列算法,将每个算法封装到一个对象中,并使它们可以互相替换。这使得算法可独立于使用它的客户端变化。
原理:
策略接口(Strategy Interface):定义一组算法的接口。
具体策略类(Concrete Strategy Classes):实现策略接口的具体算法。
上下文类(Context Class):维护一个对策略对象的引用,并在运行时选择所需的具体策略。
优点:
灵活性: 能够在运行时动态地改变对象的行为。
可扩展性: 容易增加新的算法或策略。
复用性: 可以复用现有的算法,不需要重复实现。
缺点:
增加对象数量:每个具体策略都会创建一个对象,可能会导致类的数量增加。
客户端必须知道策略:客户端需要了解不同的策略,以便选择正确的策略。
代码示例
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)
{
_strategy = strategy;
}
public void SetStrategy(IStrategy strategy)
{
_strategy = strategy;
}
public void ExecuteStrategy()
{
_strategy.Execute();
}
}
class Program
{
static void Main(string[] args)
{
// 创建上下文对象
Context context = new Context(new ConcreteStrategyA());
// 执行策略A
context.ExecuteStrategy();
// 切换到策略B
context.SetStrategy(new ConcreteStrategyB());
// 执行策略B
context.ExecuteStrategy();
}
}