Franky's LIFE

          Anything... ...

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            53 隨筆 :: 87 文章 :: 6 評論 :: 0 Trackbacks
          這段時間在項目中接觸到了 Strategy 策略模式,所以就學習了一下,做一個總結。

          ?????? Strategy 策略模式是一種對象行為模式。主要是應對:在軟件構建過程中,某些對象使用的算法可能多種多樣,經常發生變化。如果在對象內部實現這些算法,將會使對象變得異常復雜,甚至會造成性能上的負擔。

          ?????? GoF 《設計模式》中說道:定義一系列算法,把它們一個個封裝起來,并且使它們可以相互替換。該模式使得算法可獨立于它們的客戶變化。

          ?????? Strategy 模式的結構圖如下:


          ?

          ?


          ??????
          從圖中我們不難看出: Strategy 模式實際上就是將算法一一封裝起來,如圖上的 ConcreteStrategyA ConcreteStrategyB ConcreteStrategyC ,但是它們都繼承于一個接口,這樣在 Context 調用時就可以以多態的方式來實現對于不用算法的調用。

          ?????? Strategy 模式的實現如下:

          ?????? 我們現在來看一個場景:我在下班在回家的路上,可以有這幾種選擇,走路、騎車、坐車。首先,我們需要把算法抽象出來:

          ?????? public interface IStrategy

          ??? {

          ??????? void OnTheWay();

          }

          接下來,我們需要實現走路、騎車和坐車幾種方式。

          public class WalkStrategy : IStrategy

          ??? {

          ??????? public void OnTheWay()

          ??????? {

          ??????????? Console.WriteLine("Walk on the road");

          ??????? }

          ??? }

          ?

          ??? public class RideBickStragtegy : IStrategy

          ??? {

          ??????? public void OnTheWay()

          ??????? {

          ??????????? Console.WriteLine("Ride the bicycle on the road");

          ??????? }

          ??? }

          ?

          ??? public class CarStragtegy : IStrategy

          ??? {

          ??????? public void OnTheWay()

          ??????? {

          ??????????? Console.WriteLine("Drive the car on the road");

          ??????? }

          }

          ?

          最后再用客戶端代碼調用封裝的算法接口,實現一個走路回家的場景:

          class Program

          ??? {

          ??????? static void Main(string[] args)

          ??????? {

          ??????????? Console.WriteLine("Arrive to home");

          ??????????? IStrategy strategy = newWalkStrategy();

          ??????????? strategy.OnTheWay();

          ??????????? Console.Read();

          ??????? }

          }

          運行結果如下;

          Arrive to home

          Walk on the road

          如果我們需要實現其他的方法,只需要在 Context 改變一下 IStrategy 所示例化的對象就可以。

          ?

          ?????? Strategy 模式的要點:

          1 Strategy 及其子類為組件提供了一系列可重用的算法,從而可以使得類型在運行時方便地根據需要在各個算法之間進行切換。所謂封裝算法,支持算法的變化。

          2 Strategy 模式提供了用條件判斷語句以外的另一中選擇,消除條件判斷語句,就是在解耦合。含有許多條件判斷語句的代碼通常都需要 Strategy 模式。

          3 Strategy 模式已算法為中心,可以和 Factory Method 聯合使用,在工廠中使用配制文件對變化的點進行動態的配置。這樣就使變化放到了運行時。

          4 、與 Template Method 相比, Strategy 模式的中心跟集中在方法的封裝上

          posted on 2007-03-19 21:06 Franky 閱讀(169) 評論(0)  編輯  收藏 所屬分類: IT知識
          主站蜘蛛池模板: 石门县| 蓝山县| 华容县| 富宁县| 肥西县| 皮山县| 交口县| 安化县| 白朗县| 富宁县| 岗巴县| 昆明市| 怀柔区| 离岛区| 宜良县| 古浪县| 金平| 蒙城县| 馆陶县| 星座| 大宁县| 霍城县| 宁明县| 莱州市| 巴林左旗| 西平县| 盐山县| 从江县| 阿巴嘎旗| 秦安县| 浙江省| 和田县| 泗洪县| 南岸区| 合阳县| 呼伦贝尔市| 河北省| 乌拉特前旗| 博爱县| 文安县| 临漳县|