1. 程式人生 > >行為型模式-策略模式

行為型模式-策略模式

參考:https://www.jianshu.com/p/ddcb8eb175f5

1.定義

定義一系列的演算法,把每一個演算法封裝起來,並且使它們可相互替換。策略模式模式使得演算法可獨立於使用它的客戶而獨立變化。

2.介紹

  • 策略模式屬於行為型模式。
  • 策略模式提供了一組演算法給客戶端呼叫,使得客戶端能夠根據不同的條件來選擇不同的策略來解決不同的問題。
  • 如排序演算法,可以使用氣泡排序、快速排序等等。

3.UML類圖

  • Stragety(抽象策略類):抽象類或介面,提供具體策略類需要實現的介面。
  • ConcreteStragetyA、ConcreteStragetyB(具體策略類):具體的策略實現,封裝了相關的演算法實現。
  • Context(環境類):用來操作策略的上下文環境。

4.實現

見程式碼

5. 應用場景

  • 同一個問題具有不同演算法時,即僅僅是具體的實現細節不同時,如各種排序演算法等等。
  • 對客戶隱藏具體策略(演算法)的實現細節,彼此完全獨立;提高演算法的保密性與安全性。
  • 一個類擁有很多行為,而又需要使用if-else或者switch語句來選擇具體行為時。使用策略模式把這些行為獨立到具體的策略類中,可以避免多重選擇的結構。

6. 優點

  • 策略類可以互相替換
    由於策略類都實現同一個介面,因此他們能夠互相替換。
  • 耦合度低,方便擴充套件
    增加一個新的策略只需要新增一個具體的策略類即可,基本不需要改變原有的程式碼,符合開閉原則
  • 避免使用多重條件選擇語句(if-else或者switch)。

7. 缺點

  • 策略的增多會導致子類的也會變多
  • 客戶端必須知道所有的策略類,並自行決定使用哪一個策略類。

8. Android中的原始碼分析

之前我們用的ListView時都需要設定一個Adapter,而這個Adapter根據我們實際的需求可以用ArrayAdapterSimpleAdapter等等,這裡就運用到策略模式。