設計模式-行爲型-策略模式(STRATEGY)

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

  關於這句話的理解可分爲兩步驟,第一個步驟封裝算法,第二步驟算法獨立於客戶。咱們看看策略模式的結構類圖。函數

  

  這裏的Context類就是客戶類,客戶類把關於算法的實現委託給了其餘的ConcreteStrategy。這樣算法能獨立於客戶類變化,並且也方便了算法類被其餘客戶類複用。因爲獨立出了一個封裝算法的父類,策略模式的這種結構帶來的好處是顯而易見的,包括算法子類能夠複用父類的代碼,客戶能夠很方便的改變他的算法等等。同時這類結構也增長了系統調用開銷和類的數目。this

  gof在書中花了大段篇幅來解釋策略模式的實現策略。其中重要的是關於Strategy和Context的接口的設計。gof提供了兩種實現策略,這兩種共同的地方是把Strategy對象做爲構造Context對象的參數傳入或是Context提供一個函數動態設置它的Strategy對象。不一樣的地方在於:第一種是使用Strategy策略時經過傳入參數調用Strategy函數來達到實現調用的目的,第二種則是把Context對象的this指針傳入Strategy,在Strategy中使用Context的指針主動的獲取Strategy的信息。毫無疑問第二種方法將會帶來這兩種類的更深更緊密的耦合度。可是卻給Strategy提供了更精細控制的能力。全部具體實現看當時的狀況,通常狀況下,第一種實現方式就能應付了。設計

相關文章
相關標籤/搜索