策略模式【Strategy Pattern】
參考:http://wsmajunfeng.iteye.com/blog/1160825
http://blog.csdn.net/zhengzhb/article/details/7609670
策略模式
策略模式的優缺點:
策略模式的主要優點有:
- 策略類之間可以自由切換,由於策略類實現自同一個抽象,所以他們之間可以自由切換。
- 易於擴充套件,增加一個新的策略對策略模式來說非常容易,基本上可以在不改變原有程式碼的基礎上進行擴充套件。
- 避免使用多重條件,如果不使用策略模式,對於所有的演算法,必須使用條件語句進行連線,通過條件判斷來決定使用哪一種演算法,在上一篇文章中我們已經提到,使用多重條件判斷是非常不容易維護的。
策略模式的缺點主要有兩個:
- 維護各個策略類會給開發帶來額外開銷,可能大家在這方面都有經驗:一般來說,策略類的數量超過5個,就比較令人頭疼了。
- 必須對客戶端(呼叫者)暴露所有的策略類,因為使用哪種策略是由客戶端來決定的,因此,客戶端應該知道有什麼策略,並且瞭解各種策略之間的區別,否則,後果很嚴重。例如,有一個排序演算法的策略模式,提供了快速排序、氣泡排序、選擇排序這三種演算法,客戶端在使用這些演算法之前,是不是先要明白這三種演算法的適用情況?再比如,客戶端要使用一個容器,有連結串列實現的,也有陣列實現的,客戶端是不是也要明白連結串列和陣列有什麼區別?就這一點來說是有悖於迪米特法則的。
適用場景:
做物件導向設計的,對策略模式一定很熟悉,因為它實質上就是物件導向中的繼承和多型,在看完策略模式的通用程式碼後,我想,即使之前從來沒有聽說過策略模式,在開發過程中也一定使用過它吧?至少在在以下兩種情況下,大家可以考慮使用策略模式,
- 幾個類的主要邏輯相同,只在部分邏輯的演算法和行為上稍有區別的情況。
- 有幾種相似的行為,或者說演算法,客戶端需要動態地決定使用哪一種,那麼可以使用策略模式,將這些演算法封裝起來供客戶端呼叫。
策略模式是一種簡單常用的模式,我們在進行開發的時候,會經常有意無意地使用它,一般來說,策略模式不會單獨使用,跟模版方法模式、工廠模式等混合使用的情況比較多。
相關文章
- 06_Strategy Pattern 策略模式模式
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- 1/24 設計模式之策略設計模式 Strategy Pattern設計模式
- 策略模式(Strategy)模式
- 【嵌入式c++】設計模式之策略模式(Strategy)C++設計模式
- 代理模式(Proxy Pattern)模式
- 【大道模式】享元模式-FlyWeight Pattern模式
- composite pattern(組合模式)模式
- 裝飾模式 (Decorator Pattern)模式
- 建造者模式(Builder Pattern)模式UI
- 規格模式(Specification Pattern)模式
- 單例模式(Singleton Pattern)單例模式
- 設計模式--建造者模式(Builder Pattern)設計模式UI
- 設計模式--原型模式(Prototype Pattern)設計模式原型
- 設計模式--裝飾模式(Decorator Pattern)設計模式
- 設計模式-狀態模式(State Pattern)設計模式
- 設計模式-裝飾模式(Decorator Pattern)設計模式
- 設計模式之代理模式(proxy pattern)設計模式
- 介面卡模式(adapter pattern)模式APT
- 構建者模式(Builder pattern)模式UI
- C#設計模式——代理模式(Proxy Pattern)C#設計模式
- C++設計模式——命令模式(command pattern)C++設計模式
- 常用設計模式-單例模式(Singleton pattern)設計模式單例
- [Design Pattern With Go]設計模式-工廠模式Go設計模式
- 設計模式之單例模式(Singleton Pattern)設計模式單例
- Java中的代理模式(Proxy Pattern)Java模式
- 設計模式--單例(Singleton Pattern)設計模式單例
- 設計模式十: 生成器模式(Builder Pattern)設計模式UI
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式--工廠方法模式(Factory Method Pattern)設計模式
- 重識設計模式-建造者模式(Builder Pattern)設計模式UI
- C#設計模式-建造者模式(Builder Pattern)C#設計模式UI
- C#設計模式-原型模式(Prototype Pattern)C#設計模式原型
- 設計模式之介面卡模式(adapter pattern)設計模式APT
- 設計模式之裝飾器模式(decorator pattern)設計模式
- 設計模式之觀察者模式(Observer Pattern)設計模式Server
- 設計模式-抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式:命令模式(Command Pattern)及例項設計模式