文章出處

返回目錄

策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。而對于客戶端(UI)來說,可以通過IOC再配合工廠模塊,實現動態策略的切換,策略模塊通常于一個抽象策略對象(interface or abstract class),多個具體策略對象(implement class )和一個調用策略的入口組成。

何時能用到它?

對于UI來說,可能一個功能會有多種實現方式,而且實現方式可能還會有擴展,例如,一個ATM機,它目前支持工行,建行,家行,以后可能又出現了占占銀行,而這時,ATM機的客戶端程序需要擴展一個占占銀行的實現策略,這時,使用策略模式就可以實現了,它不需要修改之前的代碼,只要擴展一個占占銀行實現類即可。

策略模式的結構圖

策略模式實現說明

IStrategy:抽象策略對象

ConcreteStrategyA:具體策略A

ConcreteStrategyB:具體策略B

ConcreteStrategyC:具體策略C

Context:客戶端調用的入口

策略模式的C#實現

#region 策略模式

    // The classes that implement a concrete strategy should implement this
    // The context class uses this to call the concrete strategy
    interface IStrategy
    {
        void Execute();
    }

    // Implements the algorithm using the strategy interface
    class ConcreteStrategyA : IStrategy
    {
        public void Execute()
        {
            Console.WriteLine("Called ConcreteStrategyA.Execute()");
        }
    }

    class ConcreteStrategyB : IStrategy
    {
        public void Execute()
        {
            Console.WriteLine("Called ConcreteStrategyB.Execute()");
        }
    }

    class ConcreteStrategyC : IStrategy
    {
        public void Execute()
        {
            Console.WriteLine("Called ConcreteStrategyC.Execute()");
        }
    }

    // Configured with a ConcreteStrategy object and maintains a reference to a Strategy object
    class Context
    {
        IStrategy strategy;

        // Constructor
        public Context(IStrategy strategy)
        {
            this.strategy = strategy;
        }

        public void Execute()
        {
            strategy.Execute();
        }
    }

    #endregion

 

返回目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()