Strategy Pattern (策略模式) 定義了演算法家族,個別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變動獨立於使用操作的物件之外。
原則:
把應用中可能變化之處獨立出來,不要和那些不會變化的程式放在一起。
針對介面寫程式,而非針對實踐編程:把實現的部分獨立出來,利用介面做連結,方便以後抽換。(而非透過繼承完成抽象類別的實作)
多用合成(composition),少用繼承:合成是 has-a 的關係,某個物件中有另一個物件作為他的行為。
例子:鴨子
Duck 是抽象類別,有各種鴨子繼承它,而在 Duck 之中有兩個行為物件(Quack, Fly),以及 setQuackObj(qObj), setFlyObj(fObj) 的介面可以動態抽換這些行為(演算法)的實作方式。
這些行為(演算法)都是實作 QuackBehavior、 FlyBehavior 介面 (interface) 的類別。
關係圖:
原則:
例子:鴨子
關係圖: