《設計模式》中是這樣描述Strategy模式的:定義一系列算法,把它們一個個封裝起來,并且使它們可相互替換。Strategy模式使算法可以獨立于使用它的客戶的變化。
Strategy模式的UML圖如下所示:
從上圖可以看出,具體的算法隱藏在AbstractStrategy類背后,Client無需知道具體算法如何實現,它只需傳給Context相關參數即可。在Context中來實現具體算法的選擇(通過Client傳來的參數)。而算法的具體實現則通過ConcreteStrategy來完成。
這樣做有以下幾個好處:
1 算法的選擇與實現相分離。符合“找出變化并封裝之”的原則。如果需要修改或者添加新的算法,只需要修改相對應的ConcreteStrategy或者增加新的ConcreteStrategy并且修改算法的選擇即可。
2 Client無需關心算法如何選擇和具體實現,只需關心結果。