天天看點

設計模式-政策模式(Strategy)

一、政策模式(Strategy)

它定義了一系列的算法,将算法都分别封裝起來,并且讓它們之間可以互相替換(具有共性,有同一個政策接口),獨立于使用它的人來獨立變化

二、政策模式UML圖

設計模式-政策模式(Strategy)

三、代碼實作

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();
}
           

繼續閱讀