2010年6月20日 星期日

[DesignPattern] 策略模式 (Strategy Pattern)

Strategy Pattern (策略模式) 定義了演算法家族,個別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變動獨立於使用操作的物件之外。

原則:
  • 把應用中可能變化之處獨立出來,不要和那些不會變化的程式放在一起。
  • 針對介面寫程式,而非針對實踐編程:把實現的部分獨立出來,利用介面做連結,方便以後抽換。(而非透過繼承完成抽象類別的實作)
  • 多用合成(composition),少用繼承:合成是 has-a 的關係,某個物件中有另一個物件作為他的行為。

  • 例子:鴨子
  • Duck 是抽象類別,有各種鴨子繼承它,而在 Duck 之中有兩個行為物件(Quack, Fly),以及 setQuackObj(qObj), setFlyObj(fObj) 的介面可以動態抽換這些行為(演算法)的實作方式。
  • 這些行為(演算法)都是實作 QuackBehavior、 FlyBehavior 介面 (interface) 的類別。

  • 關係圖: