08-策略模式(Strategy)

定義:

定義了算法家族,分別封裝起來,讓它們之間可以互相替換, 此模式讓算法的變化不會影響到使用算法的用戶。

可以通過策略模式清除大量的if..else。

 

適用場景 

系統有很多類,而他們的區別僅僅在於他們的行爲不同

一個系統需要動態地在幾種算法中選擇一種

 

優點:

滿足開閉原則

避免使用多重條件轉移語句

提高算法的保密性和安全性:只需要知道策略類是幹什麼的,而不需要知道具體實現

 

缺點:

客戶端必須知道所有的策略類,並自行決定使用哪一個策略類

產生很多策略類

 

和其他模式的區別:

策略模式和工廠模式:工廠模式是創建型的設計模式,接受指令創建出符合要求的對應對象,而策略模式是行爲型的,接受已經創建好的對象,從而實現不同的行爲

策略模式和狀態模式:策略模式是需要知道要挑選哪一種策略進行處理,而狀態模式不需要知道具體的狀態,會自動轉換

 

如何消除if-else的判斷?

可以通過把判斷的邏輯視作爲key,結合工廠模式和策略模式進行處理。

 

源代碼:https://github.com/NoSuchClass/design_pattern/tree/master/src/behavioral/strategy

 

In JDK

interface Comparator<T>

比較器就是一個策略,每個具體的策略都需要實現這個接口下的方法

 

In Spring

interface Resource

也是一個策略,來進行加載各種不同位置的文件類型,比如常見的ClassPathContextResource

 

interface InstantiationStrategy

在Spring初始化bean的時候,也使用到了策略模式

這是Spring中InstantiationStrategy的兩個實現,這兩個實現並不是同級的,還存在策略與策略之間的繼承關係

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章