自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android設(shè)計模式—策略模式

移動開發(fā) Android
定義一系列算法,把他們獨立封裝起來,并且這些算法之間可以相互替換。策略模式主要是管理一堆有共性的算法,客戶端可以根據(jù)需要,很快切換這些算法,并且保持可擴展性。

1、策略模式概念

定義一系列算法,把他們獨立封裝起來,并且這些算法之間可以相互替換。策略模式主要是管理一堆有共性的算法,客戶端可以根據(jù)需要,很快切換這些算法,并且保持可擴展性。

策略模式的本質(zhì):分離算法,選擇實現(xiàn)。

2、策略模式實現(xiàn)

下面針對策略模式說一個小型的實現(xiàn)例子,個人覺得學(xué)習(xí)設(shè)計模式,***的方法是看看設(shè)計模式概念,然后先看看簡單的模式實現(xiàn)的例子。策略模式實現(xiàn)起來,主要需要3部分:抽象接口、實現(xiàn)算法、上下文。

  1. //算法的接口 
  2. public interface PriceStrategy 
  3.     public int setPrice(int orgPrice); 
  1. //實現(xiàn)一個接口,打7折商品 
  2. public class sevenPercentStrategy implements PriceStrategy 
  3.   public int setPrice(int orgPrice) 
  4.     { 
  5.           System.out.println("打7折商品"); 
  6.           return orgPrice*0.7; 
  7.     } 
  8.  
  9.  
  10. //實現(xiàn)一個接口,打5折商品 
  11. public class fivePercentStrategy implements PriceStrategy 
  12.   public int setPrice(int orgPrice) 
  13.     { 
  14.           System.out.println("打5折商品"); 
  15.           return orgPrice*0.5; 
  16.     } 
  17.  
  1. //實現(xiàn)一個上下文對象 
  2. public class DstPrice 
  3. {   
  4.     private PriceStrategy mPriceStrategy;   
  5.        
  6.     public void setPriceMode(PriceStrategy priceMode) 
  7.     {   
  8.         mPriceStrategy = priceMode;   
  9.     }   
  10.        
  11.     public int ExeCalPrice(int price) 
  12.     {   
  13.         mPriceStrategy.SetPrice(price); 
  14.     }   
  15. }   

上面是一個最簡單的策略模式的實現(xiàn)方式,按照功能分為3個部分,定義算法抽象接口,然后根據(jù)具體算法實現(xiàn)這些接口,***需要定義一個上下文對象。這里的上下文對象主要用來切換算法,上下文對象里面也是針對接口編程,具體算法實現(xiàn)被封裝了。

3、策略模式的理解

上面實現(xiàn)的只是一種最簡單的策略模式的框架,實際應(yīng)用的時候,我們可以針對不同情況修改上下文對象和具體的算法實現(xiàn)。比如說,可以增加一個抽象類實現(xiàn)作為算法模板。抽象類里面我們可以封裝一些公共的方法。這樣實現(xiàn)具體的算法的時候,每個算法公共部分就被分離出來。

策略模式的目的是把具體的算法抽離出來,把每個算法獨立出來。形成一系列有共同作用的算法組,然后這個算法組里面的算法可以根據(jù)實際情況進行相互替換。

策略模式的中心不是如何實現(xiàn)這些算法,而是如何組織和調(diào)用這些算法。也就是把我們平時寫到一塊的算法解耦出來,獨立成一個模塊,增強程序的擴展性。

策略模式里面的算法通常需要數(shù)據(jù)執(zhí)行,我們可以根據(jù)實際情況把數(shù)據(jù)放在不同地方。例如可以放在上下文類里面,然后每個算法都可以使用這些數(shù)據(jù)?;蛘邔涌诜庋b一個抽象類,在抽象類里面添加數(shù)據(jù)。這些可以根據(jù)實際的情況綜合考慮。設(shè)計模式里面沒有一成不變的***模式,每種模式都有變化版本,需要根據(jù)實際的項目進行變通。

4、策略模式優(yōu)缺點

定義一系列算法:策略模式的功能就是定義一系列算法,實現(xiàn)讓這些算法可以相互替換。所以會為這一系列算法定義公共的接口,以約束一系列算法要實現(xiàn)的功能。如果這一系列算法具有公共功能,可以把策略接口實現(xiàn)成為抽象類,把這些公共功能實現(xiàn)到父類里面,對于這個問題,前面講了三種處理方法,這里就不羅嗦了。

避免多重條件語句:根據(jù)前面的示例會發(fā)現(xiàn),策略模式的一系列策略算法是平等的,可以互換的,寫在一起就是通過if-else結(jié)構(gòu)來組織,如果此時具體的算法實現(xiàn)里面又有條件語句,就構(gòu)成了多重條件語句,使用策略模式能避免這樣的多重條件語句。

更好的擴展性:在策略模式中擴展新的策略實現(xiàn)非常容易,只要增加新的策略實現(xiàn)類,然后在選擇使用策略的地方選擇使用這個新的策略實現(xiàn)就好了。

客戶必須了解每種策略的不同:策略模式也有缺點,比如讓客戶端來選擇具體使用哪一個策略,這就可能會讓客戶需要了解所有的策略,還要了解各種策略的功能和不同,這樣才能做出正確的選擇,而且這樣也暴露了策略的具體實現(xiàn)。

增加了對象數(shù)目:由于策略模式把每個具體的策略實現(xiàn)都單獨封裝成為類,如果備選的策略很多的話,那么對象的數(shù)目就會很可觀。

只適合扁平的算法結(jié)構(gòu):策略模式的一系列算法地位是平等的,是可以相互替換的,事實上構(gòu)成了一個扁平的算法結(jié)構(gòu),也就是在一個策略接口下,有多個平等的策略算法,就相當(dāng)于兄弟算法。而且在運行時刻只有一個算法被使用,這就限制了算法使用的層級,使用的時候不能嵌套使用。

***ndroid中的應(yīng)用

下面說說在Android里面的應(yīng)用。在Android里面策略模式的其中一個典型應(yīng)用就是Adapter,在我們平時使用的時候,一般情況下我們可能繼承BaseAdapter,然后實現(xiàn)不同的View返回,GetView里面實現(xiàn)不同的算法。外部使用的時候也可以根據(jù)不同的數(shù)據(jù)源,切換不同的Adapter。

責(zé)任編輯:張葉青 來源: 第七城市
相關(guān)推薦

2021-06-09 08:53:34

設(shè)計模式策略模式工廠模式

2015-09-08 13:39:10

JavaScript設(shè)計模式

2012-08-30 09:07:33

設(shè)計模式

2024-01-29 12:22:07

設(shè)計模式策略模式

2014-12-29 10:39:16

JS

2017-07-07 10:55:14

數(shù)據(jù)庫MongoDB設(shè)計模式

2024-10-06 12:56:36

Golang策略設(shè)計模式

2013-11-26 15:48:53

Android設(shè)計模式SDK

2013-11-26 16:20:26

Android設(shè)計模式

2016-03-28 10:23:11

Android設(shè)計單例

2013-11-26 17:00:08

Android設(shè)計模式

2013-11-26 17:15:13

Android設(shè)計模式

2011-06-01 16:12:11

Android UI

2023-05-22 13:27:17

2024-12-09 09:40:00

策略模式Java

2013-11-26 17:09:57

Android設(shè)計模式

2013-11-26 16:29:22

Android設(shè)計模式

2013-11-26 16:39:21

Android設(shè)計模式

2021-02-01 10:01:58

設(shè)計模式 Java單例模式

2024-10-14 08:39:29

工廠模式策略模式代碼
點贊
收藏

51CTO技術(shù)棧公眾號