首先有一個(gè)收銀臺小程序:
商場會有促銷活動(dòng),包括打折坡椒,買200減100喉脖,買500送積分之類的很多
那么就會用到很多的if else 判斷夸楣。
那么如何消除if else 判斷呢宾抓?
可能有人想到了使用簡單工廠模式。是的豫喧,這樣確實(shí)能夠解決if 判斷石洗。但是如果后期的更改,我們是不是就要修改工廠類呢紧显?豈不是很麻煩讲衫?
CashSuper csuper = CashFactory.createCashAccept(......
csuper.getResult(......
如果使用策略模式呢?
首先我們定義一個(gè)父類現(xiàn)金收費(fèi)抽象類,讓各種促銷類繼承他涉兽,然后創(chuàng)建一個(gè)Context類招驴,在這個(gè)類中維護(hù)一個(gè)Strategy的引用。并且創(chuàng)建一個(gè)參數(shù)為Strategy類型的構(gòu)造方法枷畏,然后創(chuàng)建一個(gè)方法别厘,根據(jù)具體的Strategy對象執(zhí)行對應(yīng)的方法。
這樣拥诡,我們在客戶端的代碼就是這樣的了
CashContext csuper = new CashContext(......
csuper.getResult(......
這段代碼和工廠模式的代碼的區(qū)別就是触趴,客戶端只看到了一個(gè)類,而工廠模式看到了兩個(gè)類渴肉,也就是說冗懦,代碼的耦合度降低了。
實(shí)際上我們只是在工廠類中維護(hù)了一個(gè)Strategy引用仇祭,并添加了一個(gè)根據(jù)策略引用執(zhí)行特定的方法披蕉。然后改一下名字,就變成了策略模式乌奇。
那么我們有沒有解決最初的工廠中if else過多導(dǎo)致的后期擴(kuò)展的維護(hù)難題呢没讲?沒有。
我們只是在工廠模式的基礎(chǔ)上华弓,學(xué)習(xí)了另一種設(shè)計(jì)模式:策略模式食零,這個(gè)在簡化一些if else中還是有作用的,在客戶端最起碼沒有了大量的if 判斷寂屏,減少了代碼的壞味道。
總的來說娜搂,策略模式封裝了變化迁霎,也就是封裝了算法。應(yīng)用場景就是大量的if判斷百宇,請一定使用策略模式考廉,否則代碼以后的維護(hù)就是個(gè)大問題。
使用策略簡單工廠模式就能大大的優(yōu)化代碼携御,讓代碼具有可復(fù)用昌粤,易于維護(hù),可擴(kuò)展啄刹,靈活性高涮坐。耦合度低。