一璧疗、概念
1.1、定義
定義一系列算法馁龟,將每一個(gè)算法封裝起來(lái)崩侠,并讓它們可以相互替換。讓算法獨(dú)立于使用它的客戶而變化坷檩,即一個(gè)類的行為或其算法可以在運(yùn)行時(shí)更改却音。
- Context,環(huán)境類:算法的使用者
- Strategy:矢炼,抽象策略類:定義策略的執(zhí)行接口方法
- ConcreteStrategy系瓢,具體策略類:具體的算法設(shè)計(jì)中和執(zhí)行者
1.2、解決的問(wèn)題
問(wèn)題分析
現(xiàn)實(shí)世界中句灌,完成一項(xiàng)任務(wù)夷陋,往往可以選擇不同的方式,每一種方式被稱為一個(gè)策略,我們可以根據(jù)環(huán)境或者條件的不同選擇不同的策略來(lái)完成該項(xiàng)任務(wù)肌稻。模式解決思路:將變化的算法策略抽象出策略類Strategy清蚀,使用面向?qū)ο蟮淖宇惻缮蚪涌趯?shí)現(xiàn)來(lái)達(dá)到擴(kuò)展改變的目的;在程序運(yùn)行時(shí)候爹谭,根據(jù)具體需要指定具體策略ConcreteStrategy實(shí)例枷邪。
二、模式的應(yīng)用和優(yōu)缺點(diǎn)
2.1诺凡、應(yīng)用場(chǎng)景
-
實(shí)例:
1东揣、日志文件的本地存儲(chǔ)方案,文件腹泌、數(shù)據(jù)庫(kù)等
2嘶卧、旅游出行交通方案,自行車凉袱、飛機(jī)芥吟、動(dòng)車等
3、App的更多功能操作面板专甩,基層微信钟鸵、微博、朋友圈分享涤躲、點(diǎn)贊棺耍、評(píng)論、復(fù)制等功能入口种樱。如下
4蒙袍、在有多種算法相似的情況下,使用 if...else 所帶來(lái)的復(fù)雜和難以維護(hù)嫩挤。
2.2害幅、優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、提供一種管理相關(guān)的算法族的辦法俐镐,可以靈活擴(kuò)展算法矫限,符合開閉原則
2、避免使用多重條件 if...else 判斷
3佩抹、擴(kuò)展性良好。缺點(diǎn):
1取董、策略類會(huì)增多棍苹,可以結(jié)合享元模式進(jìn)行優(yōu)化
2、策略類對(duì)外暴露茵汰,即客戶端必須知道所有的策略類枢里,并自行決定使用哪一個(gè)策略類