老生常談:策略模式


     本來園子里面已經有很多特別好的關於設計模式學習的文章,但一般都是概念性的或者都是些簡單實例,沒有用過設計模式的朋友看過之后雖然明白怎么回事了,但是對於自己實際項目中何時用設計模式就不太清楚了,本人借jillzhang開發的控件中的部分代碼與大家討論下模式在具體項目中的應用,好的代碼應該與大家分享.

    名詞解釋:

    策略:
         1:戰略(學)

         2:策略, 計謀, 作戰方針; 智謀, 手腕

   從策略一詞來看,策略模式是種傾向於行為的模式.有點類似找仗時的做戰方案,一般司令員在做戰前都會根據實際情況做出幾套不同的方案,如果當時情況有變,就會根據相應的條件來判定用哪一套方案來替換原定方案。但無論如何替換,替換多少次,仗還是要打的。

    在他的文章中給GRIDVIEW添加上數據導出成EXCEL,WORD,PDF文件的功能,這三類導出雖然具體操作略有不同,但是大部分都相同。

    具體策略模式的類圖:

   

    

    策略模式定義(GOF):

         策略模式:主要是定義一系列的算法,把這些算法一個個封裝成擁有共同接口的類,它們之間可以互換。使客戶端調用它們的時候能夠互不影響地變化。

    具體代碼如下:

    第一:數據導出的接口類:IExporter

      抽象策略(Strategy)角色:這是一個抽象角色,通常由一個接口或抽象類實現。此角色給出所有的具體策略類所需的接口。

Code

   

     下面為實現了此接口的抽象類

Code

 

    第二:context

   環境(Context)角色:持有一個Strategy類的引用

Code

 

   第三:具體實現類

   具體策略(ConcreteStrategy)角色:包裝了相關的算法或行為。

     下面是三個具體操作類

Code

     PdfExporter:

Code

     WordExporter:

Code

    

    策略模式優點

          算法的使用和算法本身解耦,即把變化的具體算法封裝了起來。策略模式是除了繼承之外的一種彈性替代方案,如果你使用繼承定義了一個類,下面有部分的派生類,此時你會讓基類所困住,要想修改它特別不容易,而策略模式則可能通過組合不同的對象來改變行為。 

    策略模式缺點

          1、 雖說客戶代碼無須關心各個策略是如何實現的,但是它們還是要知道有多少種策略實現,具體功能情況,這樣才可以根據需要使用哪個策略。

         2、 使用策略模式后出現很多小類。

    總結

         設計模式的有效應用能夠給我們的開發帶來效率,同時也是把雙刃劍,濫用設計模式往往會費力不計好。本人在實際開發中對於模式的應用還不是特別多,如果有什么地方說錯了,還望大家諒解.  

注:

        本文引用:

                 http://blog.csdn.net/ai92/archive/2004/12/26/229825.aspx

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com