一、Strategy模式的意圖:
策略操作定義了策略的輸入和輸出,而把策略的實現工作留給了各個類。這些類以不同的方案來實現同一操作,它們為用戶提供統一的接口,因而這些類可以相互替換。
Strategy模式允許多種策略共存,而代碼不會混亂。策略模式也可以實現模式選擇邏輯和策略本身相分離。
Strategy模式的意圖在于把可選的策略或方案封裝在不同的類中,并在這些類中實現一個共同的操作。
二、Strategy模式的例子:
·抽象父類:

















·繼承子類:















·幫助類:



















三、Strategy模式的特點:
·有一個抽象的父類/接口,在其中定義了操作的模板(類似于Template模式)
·有一至多個實現類或子類,實現了父類/接口中的模板方法
·有一個可供客戶端動態切換算法的幫助類,該類擁有一個策略對象,可以在初始化時指定默認的策略,也可以在運行時通過set方法動態切換策略
四、Strategy模式與其它模式的比較:
·Strage模式與State模式的比較
在對狀態進行建模時,狀態的遷移是一個重要的方面(即如何切換到上、下一個狀態);而在對策略進行建模時,遷移與策略的選擇并不相關(即關注的是操作的策略,對象狀態的切換并不是關注的方面)。
另外一個不同之處就是,Strategy模式可能允許客戶選擇或者提供一個策略,而State模式卻很少設計這樣的思路。
·Strategy模式與Template模式的比較
Strategy模式的最大特點是可以在運行期間動態地切換算法。這一點和“Template”模式有點不同,后者雖然也提供抽象的模板框架,并且由子類繼承實現,Template模式一般在確定之后的運行期間就不會再次切換了。而前者可以或者說需要在運行期間動態地切換
五、Strategy模式的適用場合:
1.以不同的格式保存文件;
2.以不同的算法壓縮文件;
3.以不同的算法截獲圖象;
4.以不同的格式輸出同樣數據的圖形,比如曲線 或框圖bar等
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。