策略模式是行為型模式的一種,同時(shí)屬于行為模式的還有:命令模式,觀察者模式漱病,狀態(tài)模式和之前寫的中介者模式。
策略模式是一種簡單常用的模式把曼,我們在進(jìn)行開發(fā)的時(shí)候杨帽,會經(jīng)常有意無意地使用它,一般來說嗤军,策略模式不會單獨(dú)使用注盈,跟模版方法模式、工廠模式等混合使用的情況比較多叙赚。
什么是策略老客,什么是策略模式?何時(shí)使用震叮?
1.??通俗點(diǎn)講胧砰,這就是我們遇到某個(gè)問題時(shí)候所采用的方法和解決方式。如同我們需要洗一件衣服苇瓣,我們可以手洗也可以洗衣機(jī)洗尉间,而這就是我們對洗衣服這件事上的兩個(gè)策略。亦或過年過節(jié),商店打折哲嘲,有的商鋪是5折贪薪,有的商鋪是9.5折加滿200送50,這對于商家這個(gè)大集體來講眠副,他們在出售商鋪時(shí)的兩個(gè)策略古掏。
2.??做面向?qū)ο笤O(shè)計(jì)的,對策略模式一定很熟悉侦啸,因?yàn)樗鼘?shí)質(zhì)上就是面向?qū)ο笾械睦^承和多態(tài)槽唾。
3.??一個(gè)系統(tǒng)有許多許多類,而區(qū)分它們的只是他們直接的行為光涂。
策略模式的主要優(yōu)點(diǎn)有:
策略類之間可以自由切換庞萍,由于策略類實(shí)現(xiàn)自同一個(gè)抽象,所以他們之間可以自由切換忘闻。
易于擴(kuò)展钝计,增加一個(gè)新的策略對策略模式來說非常容易,基本上可以在不改變原有代碼的基礎(chǔ)上進(jìn)行擴(kuò)展齐佳。
避免使用多重條件私恬,如果不使用策略模式,對于所有的算法炼吴,必須使用條件語句進(jìn)行連接本鸣,使用 if...else 來?xiàng)l件判斷來決定使用哪一種算法,使用多重條件判斷是非常不容易維護(hù)的硅蹦。
策略模式的缺點(diǎn)主要有兩個(gè):
維護(hù)各個(gè)策略類會給開發(fā)帶來額外開銷
必須對客戶端(調(diào)用者)暴露所有的策略類荣德,因?yàn)槭褂媚姆N策略是由客戶端來決定的,因此童芹,客戶端應(yīng)該知道有什么策略涮瞻,并且了解各種策略之間的區(qū)別,否則假褪,后果很嚴(yán)重署咽。例如,有一個(gè)排序算法的策略模式生音,提供了快速排序宁否、冒泡排序、選擇排序這三種算法久锥,客戶端在使用這些算法之前家淤,是不是先要明白這三種算法的適用情況异剥?再比如瑟由,客戶端要使用一個(gè)容器,有鏈表實(shí)現(xiàn)的,也有數(shù)組實(shí)現(xiàn)的歹苦,客戶端是不是也要明白鏈表和數(shù)組有什么區(qū)別青伤?