策略模式(Strategy Pattern)
策略模式用于算法的自由切换和扩展,对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法解决某一个问题,同时可以方便更换算法或增加新的算法。
策略模式:定义一系列算法,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法可以独立于使用它的客户变化。
策略模式有3种角色:
1.Context(环境类):环境类是使用算法的类,它在解决某个问题(即实现某个功能)时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略。
2.Strategy(抽象策略类):为所支持的算法声明了抽象方法,是所有策略类的父类,可以是抽象类或具体类。也可以是接口。
3.ConcreteStrategy(具体策略类):覆盖在环境类中定义的抽象策略类对象,使用一种具体的算法实现某个业务功能。
抽象策略类:
abstract class AbstractStrategy
{
public abstract void Algorithm(); //声明抽象算法
}
具体策略类:
class ConcreteStrategyA:AbstractStrategy
{
//算法的具体实现
public override void Algorithm()
{
//算法A
}
}
环境类:
class Context
{
private AbstractStrategy strategy; //维持一个对抽象策略类的引用
public void SetStrategy(AbstractStrategy startegy)
{
this.strategy = strategy;
}
//调用策略类中的算法
public void Algorithm()
{
strategy.Algorithm();
}
}
客户端代码:
...
Context context = new Context();
AbstractStrategy strategy;
strategy = new ConcreteStrategyA();
context.SetStrategy(strategy);
context.Algorithm();
...