小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式

 skywood 2007-08-06

       這段時間在項目中接觸到了Strategy策略模式,所以就學(xué)習(xí)了一下,做一個總結(jié)。

       Strategy策略模式是一種對象行為模式。主要是應(yīng)對:在軟件構(gòu)建過程中,某些對象使用的算法可能多種多樣,經(jīng)常發(fā)生變化。如果在對象內(nèi)部實現(xiàn)這些算法,將會使對象變得異常復(fù)雜,甚至?xí)斐尚阅苌系呢?fù)擔(dān)。

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

       Strategy模式的結(jié)構(gòu)圖如下:


 

 


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

       Strategy模式的實現(xiàn)如下:

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

       public interface IStrategy

    {

        void OnTheWay();

}

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

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");

        }

}

 

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

class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Arrive to home");

            IStrategy strategy = new WalkStrategy();

            strategy.OnTheWay();

            Console.Read();

        }

}

運行結(jié)果如下;

Arrive to home

Walk on the road

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

 

       Strategy模式的要點:

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

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

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

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

posted on 2006-12-15 08:45 KiddLee 閱讀(1561) 評論(13)  編輯 收藏 引用 網(wǎng)摘 所屬分類: 設(shè)計模式

FeedBack:
# 
沙發(fā)  回復(fù)  更多評論
  
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-15 09:26 zx
淺顯易懂  回復(fù)  更多評論
  
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-15 13:02 KiddLee
@大師傅似的
@zx
謝謝關(guān)注  回復(fù)  更多評論
  
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-15 16:13 木野狐
我覺得這個代碼不能體現(xiàn) strategy 模式的特點。  回復(fù)  更多評論
  
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-15 19:20 KiddLee
@木野狐
能不能具體些。  回復(fù)  更多評論
  
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-16 08:06 十分之七
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-25 20:32 雨楊
如果能把這個程序的對應(yīng)的結(jié)構(gòu)圖畫出來就更好了!  回復(fù)  更多評論
  
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2007-01-17 15:43 高玲玲
目前為止我還沒有用過這種模式,怎么總感覺你的代碼更像是工廠模式呢?能不能幫我講一下這兩種模式的區(qū)別?
謝謝!  回復(fù)  更多評論
  
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2007-01-18 09:03 KiddLee
@高玲玲
Strategy策略模式是一種行為型模式,主要是應(yīng)對使用算法的變化
Factory Method模式是一種創(chuàng)建型模式,主要是應(yīng)對對象創(chuàng)建時的變化  回復(fù)  更多評論
  
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2007-02-07 17:42 KiddLee
@南守?fù)?
1、策略模式常常會和工廠模式一起使用,但是就本意來說,我覺得他并不包含工廠模式
2、我覺得策略模式在使用應(yīng)該是提供同樣的接口,也就是你為各個策略提供的參數(shù)是一樣的,至于參數(shù)在策略中是如何操作的,那就交給策略去做。比如說:造汽車的步驟有很多,不同的步驟安排可以形成不同的制造過程,但不能把造汽車和造自行車歸為同一類策略
這是我的理解  回復(fù)  更多評論
  
# re: 設(shè)計模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2007-07-20 00:16 dezwen
有點明白,但不是太懂,還需要繼續(xù)學(xué)習(xí)。以下是Sina播客Strategy策略模式的相關(guān)視頻,大家一起參考:
http://you.video.sina.com.cn/b/4736732-1294306030.html  回復(fù)  更多評論

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多