新聞中心
程序員小劉最近很惱火,公司新上馬了一個電商促銷項目,以發(fā)放優(yōu)惠券的形式來達到商品促銷的目的。可是項目上線一段時間后活動進行的并不理想,產(chǎn)品經(jīng)理一頓分析,認為是促銷力度不夠,需結合多種形式的活動來達到促銷的目的,于是接二連三的找到小劉,今天加一個打折促銷活動,明天加一個滿減促銷活動。。。小劉無奈只能加班加點的改動代碼,本就稀少的頭發(fā)又不見了幾根。

目前創(chuàng)新互聯(lián)公司已為成百上千家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站運營、企業(yè)網(wǎng)站設計、石阡網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
你作為小劉的資深基友,看著他的一堆if else,眉頭微皺,說道,你這樣不行啊,鬼知道這產(chǎn)品經(jīng)理還有什么餿主意,你這種情況建議用策略模式梳理一下,后期擴展也很方便。小劉一聽,兩只熊貓眼一簇,問道,策略模式,什么玩意?望著好基友疑惑的眼神,你推了推眼鏡,開啟了教學模式。
什么是策略模式?
策略模式是指不同類之間有相同的行為,但是行為的具體表現(xiàn)形式又互不相同,在運行時可以動態(tài)選擇具體要執(zhí)行的行為的模式。以小劉的業(yè)務場景為例,各種促銷活動互不相同,但是他們又有一個共同的行為——讓商品價格降低,但是每個活動的計算方法又不相同。
設想,如果不使用策略模式,當用戶選擇參加某種活動后,我們的代碼中將會出現(xiàn)一系列的判斷,如果是使用優(yōu)惠券,那么根據(jù)優(yōu)惠券規(guī)則計算商品價格,如果是參加打折促銷,那么根據(jù)打折促銷規(guī)則計算商品價格,如果是參加滿減活動,那么根據(jù)滿減活動規(guī)則計算商品價格。。。這樣無疑是災難性的。
那來看看用策略模式,這種場景將如何實現(xiàn)。
策略模式中,有三個基本角色:
- strategy:抽象策略角色,定義了共同的行為(計算商品價格)。
- concreteStrategy:具體的策略類,需要實現(xiàn)strategy,并重寫自己的行為方法。
- contextStrategy:策略上下文,持有策略角色,供客戶端調用。
我們按照這三種角色在代碼中實現(xiàn)一下。
1、定義策略角色接口strategy
我這里用的接口形式,當然也可以用抽象類。
2、定義具體的策略類
在這個場景中,我們定義三個促銷活動的策略類,分別是優(yōu)惠券活動、折扣活動、滿減活動。
優(yōu)惠券策略類
折扣活動策略類
滿減活動策略類
3、定義上下文
上下文策略類中,會持有策略類,并能夠執(zhí)行策略的行為方法
4、測試
假設用戶參加了折扣活動,那在我們的上下文策略類中,我們將選擇的折扣策略傳入,然后再執(zhí)行,就會直接在折扣策略類中執(zhí)行相應的計算。
以上就是一個簡單的策略模式的實現(xiàn)過程。使用這種方式,將每個策略的實現(xiàn)方式對外隱藏,而是通過上下文去執(zhí)行具體的策略方法,如果需要進行擴展,也不需要修改上下文,只需將新增的策略類加上即可,通過上下文去進行調用,很容易對代碼進行維護。
策略模式與工廠模式的淵源
了解工廠模式的同學可能會有些疑惑(不了解的同學可以查看另一篇文章??設計模式之工廠模式——要的是工廠而不是作坊??,這與工廠模式也太像了吧。是的,策略模式與工廠模式在代碼結構上是非常相似的,而且上文中提到的業(yè)務場景,使用工廠模式,也是可以實現(xiàn)的。只不過使用工廠模式,我們首先拿到的是目標對象,拿到目標對象后,再去執(zhí)行對應的方法,而策略模式,則是直接去執(zhí)行目標方法。這兩個模式的側重點是不同的,一個是側重于生成對象,一個是側重于實現(xiàn)行為。
實際上,策略模式往往要結合工廠模式進行使用。在上文的測試方法中,我們直接把折扣策略類new出來去執(zhí)行策略方法,而在實際應用中,客戶端調用不可能將一個對象傳過來,往往是傳一個類型代碼,或者數(shù)字,比如傳數(shù)字1表示優(yōu)惠券,傳數(shù)字2表示折扣,傳數(shù)字3表示滿減,我們在拿到數(shù)字后,可以結合工廠模式獲取具體的策略類的對象,再通過策略模式執(zhí)行目標方法,這樣在整體的結構上,就會比較清晰。
文章名稱:策略模式—多場景下的行為標兵
網(wǎng)頁鏈接:http://m.fisionsoft.com.cn/article/dhheegp.html


咨詢
建站咨詢
