模式定義:
在策略模式(Strategy Pattern)中脾拆,一個類的行為或其算法可以在運(yùn)行時更改涩笤。這種類型的設(shè)計模式屬于行為型模式。
在策略模式中叼风,我們創(chuàng)建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象殖蚕。策略對象改變 context 對象的執(zhí)行算法匙隔。
定義一系列的算法,把它們一個個封裝起來, 并且使它們可相互替換实抡。
在有多種算法相似的情況下抡笼,使用 if...else 所帶來的復(fù)雜和難以維護(hù)秽荤。
一個系統(tǒng)有許多許多類甜奄,而區(qū)分它們的只是他們直接的行為。
將這些算法封裝成一個一個的類窃款,任意地替換课兄。
實現(xiàn)同一個接口。
實現(xiàn)
我們將創(chuàng)建一個定義活動的 Strategy 接口和實現(xiàn)了 Strategy 接口的實體策略類晨继。Context 是一個使用了某種策略的類烟阐。
StrategyPatternDemo,我們的演示類使用 Context 和策略對象來演示 Context 在它所配置或使用的策略改變時的行為變化紊扬。
源碼:代碼倉庫
總結(jié):
1蜒茄、算法可以自由切換。
2餐屎、避免使用多重條件判斷扩淀。
3、擴(kuò)展性良好啤挎。
1驻谆、策略類會增多。
2庆聘、所有策略類都需要對外暴露胜臊。
1、如果在一個系統(tǒng)里面有許多類伙判,它們之間的區(qū)別僅在于它們的行為象对,那么使用策略模式可以動態(tài)地讓一個對象在許多行為中選擇一種行為。
2宴抚、一個系統(tǒng)需要動態(tài)地在幾種算法中選擇一種勒魔。
3、如果一個對象有很多的行為菇曲,如果不用恰當(dāng)?shù)哪J焦诰睿@些行為就只好使用多重的條件選擇語句來實現(xiàn)。
如果一個系統(tǒng)的策略多于四個常潮,就需要考慮使用混合模式弟胀,解決策略類膨脹的問題。
參考:菜鳥教程