自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

策略模式—多場(chǎng)景下的行為標(biāo)兵

開發(fā) 前端
策略模式是指不同類之間有相同的行為,但是行為的具體表現(xiàn)形式又互不相同,在運(yùn)行時(shí)可以動(dòng)態(tài)選擇具體要執(zhí)行的行為的模式。

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

你作為小劉的資深基友,看著他的一堆if else,眉頭微皺,說道,你這樣不行啊,鬼知道這產(chǎn)品經(jīng)理還有什么餿主意,你這種情況建議用策略模式梳理一下,后期擴(kuò)展也很方便。小劉一聽,兩只熊貓眼一簇,問道,策略模式,什么玩意?望著好基友疑惑的眼神,你推了推眼鏡,開啟了教學(xué)模式。

什么是策略模式?

策略模式是指不同類之間有相同的行為,但是行為的具體表現(xiàn)形式又互不相同,在運(yùn)行時(shí)可以動(dòng)態(tài)選擇具體要執(zhí)行的行為的模式。以小劉的業(yè)務(wù)場(chǎng)景為例,各種促銷活動(dòng)互不相同,但是他們又有一個(gè)共同的行為——讓商品價(jià)格降低,但是每個(gè)活動(dòng)的計(jì)算方法又不相同。

設(shè)想,如果不使用策略模式,當(dāng)用戶選擇參加某種活動(dòng)后,我們的代碼中將會(huì)出現(xiàn)一系列的判斷,如果是使用優(yōu)惠券,那么根據(jù)優(yōu)惠券規(guī)則計(jì)算商品價(jià)格,如果是參加打折促銷,那么根據(jù)打折促銷規(guī)則計(jì)算商品價(jià)格,如果是參加滿減活動(dòng),那么根據(jù)滿減活動(dòng)規(guī)則計(jì)算商品價(jià)格。。。這樣無疑是災(zāi)難性的。

那來看看用策略模式,這種場(chǎng)景將如何實(shí)現(xiàn)。

策略模式中,有三個(gè)基本角色:

  • strategy:抽象策略角色,定義了共同的行為(計(jì)算商品價(jià)格)。
  • concreteStrategy:具體的策略類,需要實(shí)現(xiàn)strategy,并重寫自己的行為方法。
  • contextStrategy:策略上下文,持有策略角色,供客戶端調(diào)用。

我們按照這三種角色在代碼中實(shí)現(xiàn)一下。

1、定義策略角色接口strategy

我這里用的接口形式,當(dāng)然也可以用抽象類。

2、定義具體的策略類

在這個(gè)場(chǎng)景中,我們定義三個(gè)促銷活動(dòng)的策略類,分別是優(yōu)惠券活動(dòng)、折扣活動(dòng)、滿減活動(dòng)。

優(yōu)惠券策略類

折扣活動(dòng)策略類

滿減活動(dòng)策略類

3、定義上下文

上下文策略類中,會(huì)持有策略類,并能夠執(zhí)行策略的行為方法

4、測(cè)試

假設(shè)用戶參加了折扣活動(dòng),那在我們的上下文策略類中,我們將選擇的折扣策略傳入,然后再執(zhí)行,就會(huì)直接在折扣策略類中執(zhí)行相應(yīng)的計(jì)算。

以上就是一個(gè)簡(jiǎn)單的策略模式的實(shí)現(xiàn)過程。使用這種方式,將每個(gè)策略的實(shí)現(xiàn)方式對(duì)外隱藏,而是通過上下文去執(zhí)行具體的策略方法,如果需要進(jìn)行擴(kuò)展,也不需要修改上下文,只需將新增的策略類加上即可,通過上下文去進(jìn)行調(diào)用,很容易對(duì)代碼進(jìn)行維護(hù)。

策略模式與工廠模式的淵源

了解工廠模式的同學(xué)可能會(huì)有些疑惑(不了解的同學(xué)可以查看另一篇文章??設(shè)計(jì)模式之工廠模式——要的是工廠而不是作坊??,這與工廠模式也太像了吧。是的,策略模式與工廠模式在代碼結(jié)構(gòu)上是非常相似的,而且上文中提到的業(yè)務(wù)場(chǎng)景,使用工廠模式,也是可以實(shí)現(xiàn)的。只不過使用工廠模式,我們首先拿到的是目標(biāo)對(duì)象,拿到目標(biāo)對(duì)象后,再去執(zhí)行對(duì)應(yīng)的方法,而策略模式,則是直接去執(zhí)行目標(biāo)方法。這兩個(gè)模式的側(cè)重點(diǎn)是不同的,一個(gè)是側(cè)重于生成對(duì)象,一個(gè)是側(cè)重于實(shí)現(xiàn)行為。

實(shí)際上,策略模式往往要結(jié)合工廠模式進(jìn)行使用。在上文的測(cè)試方法中,我們直接把折扣策略類new出來去執(zhí)行策略方法,而在實(shí)際應(yīng)用中,客戶端調(diào)用不可能將一個(gè)對(duì)象傳過來,往往是傳一個(gè)類型代碼,或者數(shù)字,比如傳數(shù)字1表示優(yōu)惠券,傳數(shù)字2表示折扣,傳數(shù)字3表示滿減,我們?cè)谀玫綌?shù)字后,可以結(jié)合工廠模式獲取具體的策略類的對(duì)象,再通過策略模式執(zhí)行目標(biāo)方法,這樣在整體的結(jié)構(gòu)上,就會(huì)比較清晰。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2009-09-24 16:55:27

策略模式

2025-03-26 00:03:00

Go設(shè)計(jì)模式

2022-09-06 11:57:32

ClickHouse火山引擎數(shù)據(jù)

2022-10-28 07:15:26

策略模式使用場(chǎng)景UML

2024-07-25 09:05:35

2021-02-15 22:07:18

項(xiàng)目策略模式

2024-09-11 08:56:50

ASP多身份校驗(yàn)

2021-11-04 06:58:32

策略模式面試

2023-08-16 11:39:19

高并發(fā)調(diào)優(yōu)

2012-08-30 09:07:33

設(shè)計(jì)模式

2017-07-07 10:55:14

數(shù)據(jù)庫MongoDB設(shè)計(jì)模式

2022-12-07 08:31:45

ClickHouse并行計(jì)算數(shù)據(jù)

2013-11-26 16:09:34

Android設(shè)計(jì)模式

2024-12-09 09:40:00

策略模式Java

2025-02-20 09:17:50

2021-06-09 08:53:34

設(shè)計(jì)模式策略模式工廠模式

2015-09-08 13:39:10

JavaScript設(shè)計(jì)模式

2019-08-01 15:47:25

數(shù)據(jù)備份遷移

2024-01-22 11:48:20

策略模式開發(fā)

2011-07-20 14:04:42

.NET策略模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)