一、政策模式(Strategy)
它定義了一系列的算法,将算法都分别封裝起來,并且讓它們之間可以互相替換(具有共性,有同一個政策接口),獨立于使用它的人來獨立變化
二、政策模式UML圖
三、代碼實作
Strategy類,定義所有支援的算法的公共接口
abstract class Strategy
{
//算法方法
public abstract void AlgorithmInterface();
}
ConcereteStrategy(具體政策),封裝了具體的算法或行為,繼承于Strategy
//具體算法A
class ConcreteStrategyA : Strategy
{
//算法A實作方法
public override void AlgorithmInterface()
{
Console.WriteLine("算法A實作");
}
}
//具體算法B
class ConcreteStrategyB : Strategy
{
//算法B實作方法
public override void AlgorithmInterface()
{
Console.WriteLine("算法B實作");
}
}
//具體算法C
class ConcreteStrategyC : Strategy
{
//算法C實作方法
public override void AlgorithmInterface()
{
Console.WriteLine("算法C實作");
}
}
Context,用一個ConcreteStrategy來配置,維護一個隊Strategy對象的引用
class Context
{
Straregy strategy;
public Context(Strategy strategy) //初始化時,傳入具體的政策對象
{
this.strategy = strategy;
}
//上下文接口
public void ContextInterface() //根據具體的政策對象,調用其算法的方法
{
strategy.AlgorithmInterface();
}
}
用戶端代碼
static void Main(string[] args)
{
Context context;
//由于執行個體化不同的政策,是以最終在調用context.ContextInterface();時,所獲得的結果就不完全相同
context = new Context(new ConcerteStrategyA());
context.ContextInterface();
context = new Context(new ConcerteStrategyB());
context.ContextInterface();
context = new Context(new ConcerteStrategyC());
context.ContextInterface();
Console.Read();
}