標籤:android http io 使用 sp strong 資料 on 問題
1、策略模式概念
定義一系列演算法,把他們獨立封裝起來,並且這些演算法之間可以相互替換。策略模式主要是管理一堆有共性的演算法,用戶端可以根據需要,很快切換這些演算法,並且保持可擴充性。
策略模式的本質:分離演算法,選擇實現。
2、策略模式實現
下面針對策略模式說一個小型的實現例子,個人覺得學習設計模式,最好的方法是看看設計模式概念,然後先看看簡單的模式實現的例子。策略模式實現起來,主要需要3部分:抽象介面、實現演算法、上下文。
- //演算法的介面
- public interface PriceStrategy
- {
- public int setPrice(int orgPrice);
- }
- //實現一個介面,打7折商品
- public class sevenPercentStrategy implements PriceStrategy
- {
- public int setPrice(int orgPrice)
- {
- System.out.println("打7折商品");
- return orgPrice*0.7;
- }
-
- }
-
- //實現一個介面,打5折商品
- public class fivePercentStrategy implements PriceStrategy
- {
- public int setPrice(int orgPrice)
- {
- System.out.println("打5折商品");
- return orgPrice*0.5;
- }
-
- }
- //實現一個內容物件
- public class DstPrice
- {
- private PriceStrategy mPriceStrategy;
-
- public void setPriceMode(PriceStrategy priceMode)
- {
- mPriceStrategy = priceMode;
- }
-
- public int ExeCalPrice(int price)
- {
- mPriceStrategy.SetPrice(price);
- }
- }
上面是一個最簡單的策略模式的實現方式,按照功能分為3個部分,定義演算法抽象介面,然後根據具體演算法實現這些介面,最後需要定義一個內容物件。這裡的內容物件主要用來切換演算法,內容物件裡面也是針對介面編程,具體演算法實現被封裝了。
3、策略模式的理解
上面實現的只是一種最簡單的策略模式的架構,實際應用的時候,我們可以針對不同情況修改內容物件和具體的演算法實現。比如說,可以增加一個抽象類別實現作為演算法模板。抽象類別裡面我們可以封裝一些公用的方法。這樣實現具體的演算法的時候,每個演算法公用部分就被分離出來。
策略模式的目的是把具體的演算法抽離出來,把每個演算法獨立出來。形成一系列有共同作用的演算法組,然後這個演算法組裡面的演算法可以根據實際情況進行相互替換。
策略模式的中心不是如何?這些演算法,而是如何組織和調用這些演算法。也就是把我們平時寫到一塊的演算法解耦出來,獨立成一個模組,增強程式的擴充性。
策略模式裡面的演算法通常需要資料執行,我們可以根據實際情況把資料放在不同地方。例如可以放在上下文類裡面,然後每個演算法都可以使用這些資料。或者對介面封裝一個抽象類別,在抽象類別裡面添加資料。這些可以根據實際的情況綜合考慮。設計模式裡面沒有一成不變的萬能模式,每種模式都有變化版本,需要根據實際的項目進行變通。
4、策略模式優缺點
定義一系列演算法:策略模式的功能就是定義一系列演算法,實現讓這些演算法可以相互替換。所以會為這一系列演算法定義公用的介面,以約束一系列演算法要實現的功能。如果這一系列演算法具有公用功能,可以把策略介面實現成為抽象類別,把這些公用功能實現到父類裡面,對於這個問題,前面講了三種處理方法,這裡就不羅嗦了。
避免多重條件陳述式:根據前面的樣本會發現,策略模式的一系列策略演算法是平等的,可以互換的,寫在一起就是通過if-else結構來組織,如果此時具體的演算法實現裡面又有條件陳述式,就構成了多重條件陳述式,使用原則模式能避免這樣的多重條件陳述式。
更好的擴充性:在策略模式中擴充新的策略實現非常容易,只要增加新的策略實作類別,然後在選擇使用原則的地方選擇使用這個新的策略實現就好了。
客戶必須瞭解每種策略的不同:策略模式也有缺點,比如讓用戶端來選擇具體使用哪一個策略,這就可能會讓客戶需要瞭解所有的策略,還要瞭解各種策略的功能和不同,這樣才能做出正確的選擇,而且這樣也暴露了策略的具體實現。
增加了對象數目:由於策略模式把每個具體的策略實現都單獨封裝成為類,如果備選的策略很多的話,那麼對象的數目就會很可觀。
只適合扁平的演算法結構:策略模式的一系列演算法地位是平等的,是可以相互替換的,事實上構成了一個扁平的演算法結構,也就是在一個策略介面下,有多個平等的策略演算法,就相當於兄弟演算法。而且在運行時刻只有一個演算法被使用,這就限制了演算法使用的層級,使用的時候不能嵌套使用。
5、Android中的應用
下面說說在Android裡面的應用。在Android裡面策略模式的其中一個典型應用就是Adapter,在我們平時使用的時候,一般情況下我們可能繼承BaseAdapter,然後實現不同的View返回,GetView裡面實現不同的演算法。外部使用的時候也可以根據不同的資料來源,切換不同的Adapter。
Android設計模式—策略模式