一、Strategy模式的意圖:
策略操作定義了策略的輸入和輸出,而把策略的實(shí)現(xiàn)工作留給了各個(gè)類(lèi)。這些類(lèi)以不同的方案來(lái)實(shí)現(xiàn)同一操作,它們?yōu)橛脩?hù)提供統(tǒng)一的接口,因而這些類(lèi)可以相互替換。
Strategy模式允許多種策略共存,而代碼不會(huì)混亂。策略模式也可以實(shí)現(xiàn)模式選擇邏輯和策略本身相分離。
Strategy模式的意圖在于把可選的策略或方案封裝在不同的類(lèi)中,并在這些類(lèi)中實(shí)現(xiàn)一個(gè)共同的操作。
二、Strategy模式的例子:
·抽象父類(lèi):

















·繼承子類(lèi):















·幫助類(lèi):



















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