针对一组算法,将每一个算法封装到具有共公接口的类中,使得他们可以相互替换。
使得算法可以再不影响到客户端的情况下发生变化。
策略模式可以使得行为跟环境分开,策略模式相当于“可插入式的算法”(Pluggable)
模式涉及到三中角色:
环境角色(Context):持有对Strategy类的引用
抽象策略角色(Strategy):这是一个抽象 的角色,通常有一个接口或者抽象类来实现。
从此角色给出所有的具体策略类所需的接口。
具体策略类(ConcreteStrategy):包装了相关的算法和行为
代码:
/// <summary>/// 策略上下文
/// </summary>
public class StrategyPattenContext
{
IStrategyPatten _StrategyPatten;
public StrategyPattenContext(IStrategyPatten strategyPatten)
{
this._StrategyPatten = strategyPatten;
}
public void Operate()
{
_StrategyPatten.Operate();
}
}
/// <summary>
/// 抽象策略类[]
/// </summary>
public interface IStrategyPatten
{
/// <summary>
/// 操作方法
/// </summary>
void Operate();
}
/// <summary>
/// 具体策略类ConcreteStratePatternA
/// </summary>
public class ConcreteStratePatternA : IStrategyPatten
{
public void Operate()
{
Console.WriteLine("this is ConcreteStratePatternA");
}
}
/// <summary>
/// 具体策略类ConcreteStratePatternB
/// </summary>
public class ConcreteStratePatternB : IStrategyPatten
{
public void Operate()
{
Console.WriteLine("this is ConcreteStratePatternB");
}
}
/// <summary>
/// 具体策略类ConcreteStratePatternC
/// </summary>
public class ConcreteStratePatternC : IStrategyPatten
{
public void Operate()
{
Console.WriteLine("this is ConcreteStratePatternC");
}
}
class Program
{
static void Main(string[] args)
{
// 策略模式
StrategyPattenContext context=null;
// ConstreteStratePatternA
context = new StrategyPattenContext(new ConcreteStratePatternA());
context.Operate();
// ConstreteStratePatternB
context = new StrategyPattenContext(new ConcreteStratePatternB());
context.Operate();
// ConstreteStratePatternC
context = new StrategyPattenContext(new ConcreteStratePatternC());
context.Operate();
Console.ReadLine();
}
}