成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

策略模式—多場景下的行為標兵

開發 前端
策略模式是指不同類之間有相同的行為,但是行為的具體表現形式又互不相同,在運行時可以動態選擇具體要執行的行為的模式。

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

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

什么是策略模式?

策略模式是指不同類之間有相同的行為,但是行為的具體表現形式又互不相同,在運行時可以動態選擇具體要執行的行為的模式。以小劉的業務場景為例,各種促銷活動互不相同,但是他們又有一個共同的行為——讓商品價格降低,但是每個活動的計算方法又不相同。

設想,如果不使用策略模式,當用戶選擇參加某種活動后,我們的代碼中將會出現一系列的判斷,如果是使用優惠券,那么根據優惠券規則計算商品價格,如果是參加打折促銷,那么根據打折促銷規則計算商品價格,如果是參加滿減活動,那么根據滿減活動規則計算商品價格。。。這樣無疑是災難性的。

那來看看用策略模式,這種場景將如何實現。

策略模式中,有三個基本角色:

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

我們按照這三種角色在代碼中實現一下。

1、定義策略角色接口strategy

我這里用的接口形式,當然也可以用抽象類。

2、定義具體的策略類

在這個場景中,我們定義三個促銷活動的策略類,分別是優惠券活動、折扣活動、滿減活動。

優惠券策略類

折扣活動策略類

滿減活動策略類

3、定義上下文

上下文策略類中,會持有策略類,并能夠執行策略的行為方法

4、測試

假設用戶參加了折扣活動,那在我們的上下文策略類中,我們將選擇的折扣策略傳入,然后再執行,就會直接在折扣策略類中執行相應的計算。

以上就是一個簡單的策略模式的實現過程。使用這種方式,將每個策略的實現方式對外隱藏,而是通過上下文去執行具體的策略方法,如果需要進行擴展,也不需要修改上下文,只需將新增的策略類加上即可,通過上下文去進行調用,很容易對代碼進行維護。

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

了解工廠模式的同學可能會有些疑惑(不了解的同學可以查看另一篇文章??設計模式之工廠模式——要的是工廠而不是作坊??,這與工廠模式也太像了吧。是的,策略模式與工廠模式在代碼結構上是非常相似的,而且上文中提到的業務場景,使用工廠模式,也是可以實現的。只不過使用工廠模式,我們首先拿到的是目標對象,拿到目標對象后,再去執行對應的方法,而策略模式,則是直接去執行目標方法。這兩個模式的側重點是不同的,一個是側重于生成對象,一個是側重于實現行為。

實際上,策略模式往往要結合工廠模式進行使用。在上文的測試方法中,我們直接把折扣策略類new出來去執行策略方法,而在實際應用中,客戶端調用不可能將一個對象傳過來,往往是傳一個類型代碼,或者數字,比如傳數字1表示優惠券,傳數字2表示折扣,傳數字3表示滿減,我們在拿到數字后,可以結合工廠模式獲取具體的策略類的對象,再通過策略模式執行目標方法,這樣在整體的結構上,就會比較清晰。

責任編輯:姜華 來源: 今日頭條
相關推薦

2009-09-24 16:55:27

策略模式

2025-03-26 00:03:00

Go設計模式

2022-09-06 11:57:32

ClickHouse火山引擎數據

2022-10-28 07:15:26

策略模式使用場景UML

2024-07-25 09:05:35

2021-02-15 22:07:18

項目策略模式

2024-09-11 08:56:50

ASP多身份校驗

2021-11-04 06:58:32

策略模式面試

2023-08-16 11:39:19

高并發調優

2022-12-07 08:31:45

ClickHouse并行計算數據

2017-07-07 10:55:14

數據庫MongoDB設計模式

2012-08-30 09:07:33

設計模式

2013-11-26 16:09:34

Android設計模式

2024-12-09 09:40:00

策略模式Java

2025-02-20 09:17:50

2021-06-09 08:53:34

設計模式策略模式工廠模式

2015-09-08 13:39:10

JavaScript設計模式

2019-08-01 15:47:25

數據備份遷移

2011-07-20 14:04:42

.NET策略模式

2024-01-22 11:48:20

策略模式開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久婷婷国产综合精品电影 | 亚洲91精品| 一区二区日韩 | 夜夜久久 | 青青草综合 | 中文字幕综合 | a毛片| 久久久夜色精品亚洲 | 欧美精品第一区 | 女女百合av大片一区二区三区九县 | 天天拍天天操 | 91免费在线播放 | 精品国产乱码久久久久久老虎 | 国产一区 日韩 | 国产高清在线观看 | 免费能直接在线观看黄的视频 | 久久久成人免费视频 | 99国内精品 | 一区二区三区在线电影 | 免费观看毛片 | 日本午夜免费福利视频 | 美女爽到呻吟久久久久 | 久久久久亚洲精品 | 久夜精品 | 久久香蕉精品视频 | 欧美午夜精品久久久久久浪潮 | 免费看日韩视频 | 在线午夜| 亚洲精品国产电影 | 亚洲成人福利在线观看 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 欧美a区 | 青青草网 | 免费看国产a| 日韩欧美在线不卡 | 久久免费精品视频 | 91偷拍精品一区二区三区 | 欧美a在线 | 欧洲尺码日本国产精品 | 久久久久精 | 午夜播放器在线观看 |