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 閱讀(165) 評論(0)  編輯  收藏 所屬分類: IT知識
          主站蜘蛛池模板: 沂水县| 阳谷县| 开江县| 九台市| 繁峙县| 邯郸市| 合阳县| 菏泽市| 沙湾县| 甘孜县| 香河县| 东方市| 乐亭县| 上虞市| 津市市| 武功县| 曲麻莱县| 丰顺县| 谢通门县| 洛扎县| 大关县| 桃江县| 常州市| 新宾| 股票| 巴南区| 蓬安县| 漳平市| 阜平县| 禄丰县| 分宜县| 沙田区| 枣阳市| 兴隆县| 洞口县| 恭城| 通化市| 金川县| 百色市| 得荣县| 深水埗区|