<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                **定義:**策略模式(Strategy Pattern),定義一系列算法,把它們一個個封裝起來,并且使它們可以相互替換。本模式使得算法可以獨立于使用它的客戶而變化。 類型:對象行為型模式。 概述: ??????策略模式是比較典型的對象行為型模式,它是將對處理對象的一系列不同算法都單獨抽離出來,單獨封裝成一個個類。策略的出現,主要是為了解決不同算法替換時的邏輯判斷,將邏輯判斷移到Client中去。策略模式比較常見,但是也相對比較簡單。 ??????一系列算法,作為程序員,很容易就想到排序算法。那這里就以排序算法來舉例了。有文本內容Context,如果錄得的是亂序數據,那么排序最好選擇快速排序(Quick Sort);如果是多部分都有序,只有個別數據隨意插入其中,那么此時可以使用選擇排序(Select Sort)。 類圖: ![](https://box.kancloud.cn/2016-08-19_57b6b467b6109.jpg) 參與者: 1. Context,上下文,維護一個指向SortAlgo的指針,用來訪問相應的排序算法。 1. SortAlgo,算法策略接口類,只是提供接口。 1. QuickSort、SelectSort,按照接口實現具體的算法。 示例代碼: ~~~ using System; using System.Collections.Generic; using System.Text; namespace Pattern22 { // 抽象算法類 abstract class SortAlgo { //算法方法 public abstract void Sort(); } // 快速排序算法 class QuickSort : SortAlgo { // 具體實現快速排序算法 public override void Sort() { Console.WriteLine("快速排序算法實現"); } } // 選擇排序算法 class SelectSort : SortAlgo { // 具體實現選擇排序算法 public override void Sort() { Console.WriteLine("選擇排序算法實現"); } } //上下文 class Context { SortAlgo algo; public Context(SortAlgo _algo) { this.algo = _algo; } //上下文接口 public void SortData() { algo.Sort(); } } class Program { static void Main(string[] args) { Context context; // 當錄入的是隨機數據時,選擇使用快速排序算法 context = new Context(new QuickSort()); context.SortData(); // 當錄入一些比較有順序的數據時,使用選擇排序算法 context = new Context(new SelectSort()); context.SortData(); Console.Read(); } } } ~~~ 適用性: 1. 多個類只區別在表現行為不同,可以使用Strategy模式,在運行時動態選擇具體要執行的行為。 1. 在需要新添加其他算法來實現時。 1. 對客戶端隱藏具體算法的實現細節。 優缺點: 1. 優點,將判斷的邏輯移到類外面,方便通過添加新類來完成新的算法。 1. 缺點,如果算法類過多,會對Client端調用不同算法的判斷帶來麻煩。 參考資料: 1. 《設計模式——可復用面向對象軟件基礎》 1. 《大話設計模式》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看