免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

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

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

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

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

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


 

 


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

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

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

       public interface IStrategy

    {

        void OnTheWay();

}

接下來(lái),我們需要實(shí)現(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)用封裝的算法接口,實(shí)現(xiàn)一個(gè)走路回家的場(chǎng)景:

class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Arrive to home");

            IStrategy strategy = new WalkStrategy();

            strategy.OnTheWay();

            Console.Read();

        }

}

運(yùn)行結(jié)果如下;

Arrive to home

Walk on the road

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

 

       Strategy模式的要點(diǎn):

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

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

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

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

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

FeedBack:
# 
沙發(fā)  回復(fù)  更多評(píng)論
  
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-15 09:26 zx
淺顯易懂  回復(fù)  更多評(píng)論
  
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-15 13:02 KiddLee
@大師傅似的
@zx
謝謝關(guān)注  回復(fù)  更多評(píng)論
  
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-15 16:13 木野狐
我覺(jué)得這個(gè)代碼不能體現(xiàn) strategy 模式的特點(diǎn)。  回復(fù)  更多評(píng)論
  
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-15 19:20 KiddLee
@木野狐
能不能具體些。  回復(fù)  更多評(píng)論
  
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-16 08:06 十分之七
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2006-12-25 20:32 雨楊
如果能把這個(gè)程序的對(duì)應(yīng)的結(jié)構(gòu)圖畫出來(lái)就更好了!  回復(fù)  更多評(píng)論
  
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2007-01-17 15:43 高玲玲
目前為止我還沒(méi)有用過(guò)這種模式,怎么總感覺(jué)你的代碼更像是工廠模式呢?能不能幫我講一下這兩種模式的區(qū)別?
謝謝!  回復(fù)  更多評(píng)論
  
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2007-01-18 09:03 KiddLee
@高玲玲
Strategy策略模式是一種行為型模式,主要是應(yīng)對(duì)使用算法的變化
Factory Method模式是一種創(chuàng)建型模式,主要是應(yīng)對(duì)對(duì)象創(chuàng)建時(shí)的變化  回復(fù)  更多評(píng)論
  
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2007-02-07 17:42 KiddLee
@南守?fù)?br>1、策略模式常常會(huì)和工廠模式一起使用,但是就本意來(lái)說(shuō),我覺(jué)得他并不包含工廠模式
2、我覺(jué)得策略模式在使用應(yīng)該是提供同樣的接口,也就是你為各個(gè)策略提供的參數(shù)是一樣的,至于參數(shù)在策略中是如何操作的,那就交給策略去做。比如說(shuō):造汽車的步驟有很多,不同的步驟安排可以形成不同的制造過(guò)程,但不能把造汽車和造自行車歸為同一類策略
這是我的理解  回復(fù)  更多評(píng)論
  
# re: 設(shè)計(jì)模式學(xué)習(xí)筆記(十八)——Strategy策略模式 2007-07-20 00:16 dezwen
有點(diǎn)明白,但不是太懂,還需要繼續(xù)學(xué)習(xí)。以下是Sina播客Strategy策略模式的相關(guān)視頻,大家一起參考:
http://you.video.sina.com.cn/b/4736732-1294306030.html  回復(fù)  更多評(píng)論
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
策略模式(Strategy Pattern)
設(shè)計(jì)模式之策略模式
java設(shè)計(jì)模式———策略模式
java設(shè)計(jì)模式之——策略模式
點(diǎn)外賣,讓我想起了 策略模式【原創(chuàng)】
策略模式 C#策略模式(Strategy Pattern)實(shí)例教程
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服