Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 中的那些策略模式

Android 中的那些策略模式

編輯:關於Android編程

首先祭上經典的策略模式 UML 圖

這裡寫圖片描述

可以看到,策略模式中主要有以下幾個角色:

Strategy 接口,用於定義算法的固定套路 ConcreteStrategyA , …..B , 等具體算法實現類 Context 外部調用類

Context 中引用的是 接口,因此當更換具體實現時,Context 不用修改代碼,這就是針對接口編程的好處。

策略模式例子 1 : ListAdapter

在 RecyclerView 還沒火起來前,ListView 是一個很重要的組件,我們通常在布局裡寫個 ListView 組件,然後在代碼中 setAdapter,把 View 與 Model 結合的任務交給了 Adapter。

比如 ListView 要顯示的子布局是個簡單的文字時,我們可以使用 ArrayAdapter :

這裡寫圖片描述

要顯示復雜些的布局時,就需要用 BaseAdapter

這裡寫圖片描述

我們可以看到,當更換 Adapter 的具體實現時,仍然調用的是 ListView.setAdapter(…) 方法,查看 ListView 源碼,發現 setAdapter 方法的參數是一個 ListAdapter:

這裡寫圖片描述

繼續看 ListAdapter 源碼和類結構:

這裡寫圖片描述

可以看到 ListAdapter 是一個接口,ArrayAdapter 和 BaseAdapter 是它的一個實現類。對比文章開始給出的 策略模式 UML 圖,可以發現 ListAdapter 就是 strategy 接口,ArrayAdpater 等就是具體的實現類,而在 ListView 中引用的是 接口 ListAdapter,可以證實這就是一個 策略模式 的使用。

.

策略模式例子2 : TimeInterpolator

時間插值器,它是一個接口,定義了動畫改變的速率,允許動畫進行非勻速變化。
我們在使用屬性動畫時,可以根據需要選擇合適的時間插值器:

這裡寫圖片描述

和 ListView 的 setAdapter 一樣,ValueAnimator 的 setInterpolator 方法中也引用的是 接口 TimeInterpolator:

這裡寫圖片描述

TimeInterpolator 源碼及類結構:

這裡寫圖片描述

這裡寫圖片描述

跟 ListAdapter 是多麼的相似!

總結

通過這兩個例子,我的第一感覺是 :

策略模式中的“策略”名字都好像啊,後綴都一樣!

的確這樣,Android 源碼中接口與具體實現,或者同樣功能的類都會有一些共同的後綴,因此遇到這些名字很像的類,我們就可以考慮下,它們是不是同一問題的不同解決方法呢?

策略模式的定義:

在接口定義了一系列算法,並將每個算法的具體實現封裝起來,外部引用的是抽象接口,使得不同算法可以互相替換而不影響客戶。

使用場景

在某一場景需要有多種情況,不同情況有不同的處理(大量 if-else 或者 switch),但大致功能是一樣的,這時我們可以考慮用策略模式實現。

優點

每個算法都獨立於其他,方便單元測試 結構更加清晰,不會像一堆條件語句讓你看著頭暈 客戶端引用的是接口,耦合度更低,擴展性更強

缺點

隨著策略增加,子類會增加 但這個不就是設計模式的通病嗎?0.0
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved