策略模式:Strategy,它定義了演算法家族,分別封裝起來,讓他們之間可以相互替換,讓演算法的變化不會影響到演算法使用者
1.定義抽象演算法
/// <summary>
/// 抽象演算法類
/// </summary>
abstract class Strategy
{
/// <summary>
/// 演算法方法 介面定義
/// </summary>
public abstract void AlgorithmInterface();
}
2.具體演算法的實現
/// <summary>
/// 具體演算法A
/// </summary>
class ConcreteStrategyA : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("演算法A的實現");
}
}
/// <summary>
/// 具體演算法B
/// </summary>
class ConcreteStrategyB : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("演算法B的實現");
}
}
/// <summary>
/// 具體演算法C
/// </summary>
class ConcreteStrategyC : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("演算法C的實現");
}
}
3.調度類
/// <summary>
/// 承上啟下的演算法調用
/// </summary>
class Context
{
Strategy strategy;
/// <summary>
/// 傳入具體策略對象
/// </summary>
/// <param name="strategy"></param>
public Context(Strategy strategy)
{
this.strategy = strategy;
}
/// <summary>
/// 根據策略對象的值判斷調用的演算法類
/// </summary>
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
用戶端調用:
/// <summary>
/// 測試策略
/// </summary>
static void TestStrategy()
{
Context context;
//策略A
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
//策略B
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
//策略C
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
Console.Read();
}
策略模式比較簡單但是應用非常的多