3.策略模式

原理

在策略模式(Strategy Pattern)中,一個類的行為或其算法可以在運行時更改。這種類型的設計模式屬于行為型模式。
在策略模式中,我們創(chuàng)建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變context 對象的執(zhí)行算法。

意圖

定義一系列的算法,把它們一個個封裝起來, 并且使它們可相互替換。

主要解決

在有多種算法相似的情況下,使用 if...else 所帶來的復雜和難以維護

應用實例:

1、諸葛亮的錦囊妙計,每一個錦囊就是一個策略。 2、旅行的出游方式,選擇騎自行車、坐汽車,每一種旅行方式都是一個策略。

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 策略模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Context c = new Context("A");
            c.GetResult();

            Context b = new Context("B");
            b.GetResult();

            Console.ReadKey();
        }
    }
}

Strategy.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 策略模式
{
    //策略和簡單工廠結合
    class Context
    {
        Strategy st = null;
        public Context(string type)
        {
            switch (type)
            {
                case "A":
                            st = new ConcreteStartegyA();
                    break;
                case "B":
                            st = new ConcreteStartegyB();
                    break;
                case "C":
                            st = new ConcreteStartegyC();
                    break;
            }
        }

        public void GetResult()
        {
            st.AlgorithmInterface();
        }
    }

    //抽象算法類
    abstract class Strategy
    {
        //算法方法
        public abstract void AlgorithmInterface();
    }
    //具體算法A
    class ConcreteStartegyA : Strategy
    {
        //算法A實現(xiàn)方法
        public override void AlgorithmInterface()
        {
            Console.WriteLine("算法A實現(xiàn)");
        }
    }
    //具體算法B
    class ConcreteStartegyB : Strategy
    {
        //算法B實現(xiàn)方法
        public override void AlgorithmInterface()
        {
            Console.WriteLine("算法B實現(xiàn)");
        }
    }
    //具體算法C
    class ConcreteStartegyC : Strategy
    {
        //算法C實現(xiàn)方法
        public override void AlgorithmInterface()
        {
            Console.WriteLine("算法C實現(xiàn)");
        }
    }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容