1.定義:
定義一系列的算法,并將每一個算法封裝起來,而且使他們可以相互替換,讓算法獨立于使用它的客戶而獨立變化。
2.應(yīng)用場景:
多個類只區(qū)別在表現(xiàn)行為不同,可以在運行時動態(tài)選擇具體要執(zhí)行的行為。
需要在不同情況下使用不同的策略(算法),或者策略還可能在未來用其它方式來實現(xiàn)。
對客戶隱藏具體策略(算法)的實現(xiàn)細節(jié),彼此完全獨立。
3. 優(yōu)缺點
優(yōu)點:
1.策略類之間可以自由切換,由于策略類都實現(xiàn)同一個接口,所以使它們之間可以自由切換。
2.易于擴展,增加一個新的策略只需要添加一個具體的策略類即可,基本不需要改變原有的代碼,符合“開閉原則“
3.避免使用多重條件選擇語句(if else),充分體現(xiàn)面向?qū)ο笤O(shè)計思想。
缺點:
1.客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。
2.策略模式將造成產(chǎn)生很多策略類,可以通過使用享元模式在一定程度上減少對象的數(shù)量。
4. android源碼中的使用:
例如 動畫中的插值器,開發(fā)者可以根據(jù)需要選擇不同的插值器,且插值器的替換不會影響其他代碼
5. 實例演示:
以日常出行乘坐的公交地鐵等計費為例,若不使用策略模式,可能會這樣寫:
1. 封裝一個價格計算類
2. 調(diào)用
如上面代碼中所提的問題,若像新增一種出行方式就需要在價格計算類中新增計價方法,并增加if-else判斷,下面使用策略模式實現(xiàn):
1. 定義一個價格計算接口

2. 創(chuàng)建具體的實現(xiàn)類,如公交,地鐵,出租車;
3. 在程序設(shè)計中使用,并提供set 方法;

4. 通過設(shè)置不同的策略實現(xiàn)類,得到不同的計算結(jié)果;

我是今陽,如果想要進階和了解更多的干貨,歡迎關(guān)注公眾號”今陽說“接收我的最新文章