精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go 程序里 if else 分支太多?試著用策略模式治理一下吧!

開發 前端
策略模式和模版模式經常配合使用,策略模式是讓完成某個任務的具體方式可以相互切換,而模版模式則是針對一個流程的共性梳理出固定的執行步驟,具體步驟的執行方式下放給子類來實現。兩者解耦的維度不一樣,策略模式在抽象方法的實現里,經常會用到模板模式。

大家好,我是每周在這里陪你一起進步的網管。

上篇文章我給大家分享了設計模式中的模版模式,給大家講了用模版模式在項目開發時提煉流程、減少重復開發的技巧。同時,在上一篇文章我也分享了我總結的一個暴論,那就是“模板、策略和職責鏈三個設計模式是解決業務系統流程復雜多變這個痛點的利器”。

今天我們繼續接著一起學習一下策略模式,以及用 Go 代碼怎么實現策略模式。

什么是策略模式

策略模式是一種行為設計模式,通過策略模式,可以在運行時修改一個對象的行為。很多資料里對它的定義是:

定義一類算法族,將每個算法分別封裝起來,讓他們可以互相替換,此模式讓算法的變化獨立于使用算法的客戶端。

看完策略模式這個定義,你是不是也有一種看了等于沒看的感覺,我一開始看的時候也是這樣,下面我再用一些大白話給大家解釋一下。

白話策略模式

策略模式這個定義乍一看起來,還是挺抽象、挺難懂的,這里說的算法并不是我們想找工作準備面試時每天要刷的那種算法;定義一類算法族中的算法族說的要完成的某項任務的歸類,舉個例子來說比如用戶支付,就是個任務類。

算法族中的每個算法(即策略)則是說的完成這項任務的具體方式,結合我們的例子來說就是可以用支付寶也可以用微信支付這兩種方式 (算法) ,來完成我們定義的用戶支付這項任務 (算法族)。

策略模式主要用于允許我們的程序在運行時動態更改一個任務的處理邏輯,常見的應用場景有針對軟件用戶群體的不同策略切換(用一個爛大街的詞兒表達就是千人千面)和業務流程兜底切換。

注意:這里是為了大家好理解舉了支付這個例子,實際上運行時切換支付方式還是挺復雜的,實踐的時候你可以先從運行時切換通知用戶的任務練起。

策略模式要解決的問題是,讓使用客戶端跟具體執行任務的策略解耦,不管使用哪種策略完成任務,不需要更改客戶端使用策略的方式。

上面說的這些使用策略模式完成任務的整個形態用 UML 圖表示出來,會比較清晰,策略模式的 UML 圖如下:

圖片

圖中,主要有四類角色:

客戶端:這個客戶端可以簡單理解成是發起任務調用的代碼。

抽象策略:就是上面定義中的算法族,是所有具體策略的通用接口,聲明了用于執行完成任務的方法。

具體策略:實現了抽象策略,定義了具體應該怎么完成任務。

  • 上下文:作為客戶端和具體策略的中間層,達到客戶端與具體策略解耦的效果,它維護指向具體策略的引用,且僅通過抽象策略中定義的接口與具體策略進行交流。常用的實現方式是通過組合

上面類圖里一個細節,上下文對象引用具體策略類的時候,使用的是組合的方式,讓其私有屬性指向策略接口的具體實現,這樣就能完成在運行時修改執行任務的具體策略的效果(通過SetStrategy方法)。

光看上面的描述和UML圖,還是有點單薄,為了更容易理解,下面咱們再舉個更具體點的例子。

策略模式示例--實現支付策略

舉例環節,接著用我們上面用的用戶支付這個任務為例子。比如說在購物 App 上買東西后要付錢,客戶端使用微信支付、或者是其他三方在線支付。如果使用策略模式進行解耦,客戶端都可以使用同樣的調用方式完成支付,甚至可以在微信支付不能使用時,讓應用無痛地切換到三方支付,來完成支付。

注意這里的客戶端是上面說的,調用上下文的代碼,不是手機APP。

在用代碼實現支付策略前,先用 UML 類圖梳理一下整個實現的大體結構:

圖片

PayBehavior:抽象策略,對支付任務進行接口抽象

WxPay 和 ThirdPay :是具體的策略實現

PaxCtx:上下文對象在這里有兩個作用,第一是協調自己持有的 PayBehavior 具體實現,完成支付的任務,第二是維護發起支付需要的支付參數--即圖中的私有屬性payParams。

下面我們把這個 UML 圖轉化為代碼實現,首先是定義PayBehavior 策略的接口

type PayBehavior interface {
OrderPay(px *PayCtx)
}

有了接口后,我們來定義兩個策略的實現

// 具體支付策略實現
// 微信支付
"本文使用的完整可運行源碼
去公眾號「網管叨bi叨」發送【設計模式】即可領取"
type WxPay struct {}
func(*WxPay) OrderPay(px *PayCtx) {
fmt.Printf("Wx支付加工支付請求 %v\n", px.payParams)
fmt.Println("正在使用Wx支付進行支付")
}

// 三方支付
type ThirdPay struct {}
func(*ThirdPay) OrderPay(px *PayCtx) {
fmt.Printf("三方支付加工支付請求 %v\n", px.payParams)
fmt.Println("正在使用三方支付進行支付")
}

有了策略的實現后,還得有個上下文來協調它們,以及持有完成這個任務所必需的那些入參payParams

"本文使用的完整可運行源碼
去公眾號「網管叨bi叨」發送【設計模式】即可領取"
type PayCtx struct {
// 提供支付能力的接口實現
payBehavior PayBehavior
// 支付參數
payParams map[string]interface{}
}

func (px *PayCtx) setPayBehavior(p PayBehavior) {
px.payBehavior = p
}

func (px *PayCtx) Pay() {
px.payBehavior.OrderPay(px)
}

func NewPayCtx(p PayBehavior) *PayCtx {
// 支付參數,Mock數據
params := map[string]interface{} {
"appId": "234fdfdngj4",
"mchId": 123456,
}
return &PayCtx{
payBehavior: p,
payParams: params,
}
}

所有這些代碼都準備好后,我們就可以試著運行程序調用它們了。

func main() {
wxPay := &WxPay{}
px := NewPayCtx(wxPay)
px.Pay()
// 假設現在發現微信支付沒錢,改用三方支付進行支付
thPay := &ThirdPay{}
px.setPayBehavior(thPay)
px.Pay()
}

這個例子的實現還是比較簡單的,相信大家都能看懂,我覺得最重要的是理解這個代碼框架,后面自己結合實際在項目里實現策略模式的時候,可以支持拿來套用。

本文的完整源碼,已經同步收錄到我整理的電子教程里啦,可向我的公眾號「網管叨bi叨」發送關鍵字【設計模式】領取。

圖片

下面我們再來說說策略模式和上篇文章學習的模板模式的區別和關聯使用。

策略模式和模板模式

策略模式和模版模式經常配合使用,策略模式是讓完成某個任務的具體方式可以相互切換,而模版模式則是針對一個流程的共性梳理出固定的執行步驟,具體步驟的執行方式下放給子類來實現。兩者解耦的維度不一樣,策略模式在抽象方法的實現里,經常會用到模板模式。

還是拿我們上面的支付行為舉例子。上面策略模式定義了一個算法族(支付),以及多個具體算法實現(微信、三方支付),讓支付策略對客戶端解耦。

上面咱們的示例代碼還是比較簡單的,通常完成支付時,還需要用參數生成簽名、驗證客戶端傳過來的簽名、調用支付基礎服務進行預下單、下單等操作,但是每種支付基礎服務設計的接口和交互流程可能會有些小的差別,這個時候就可以用上簽名學的模版模式,統一支付任務內部的流程步驟,策略模式、模版模式相結合使用能讓我們寫的程序更健壯、更容易維護。

責任編輯:武曉燕 來源: 網管叨bi叨
相關推薦

2022-09-19 08:48:03

項目初始化線程

2025-01-10 11:07:28

2022-07-11 08:16:55

策略模式if-else

2022-03-07 06:34:22

CQRS數據庫數據模型

2022-05-24 13:09:28

區塊鏈

2021-11-09 08:57:13

元宇宙VR平行時空

2021-01-28 10:23:26

Seata模式分布式

2013-03-06 10:28:57

ifJava

2023-06-05 14:14:21

騰訊索引面試

2022-02-24 17:37:47

低代碼拖拽前端

2021-05-17 14:57:23

策略模式代碼

2017-04-24 14:00:03

2021-01-21 07:31:11

Filter框架權限

2020-11-12 15:38:48

機器人人工智能系統

2021-11-02 14:54:41

Go結構體標簽

2023-03-29 23:40:24

2019-12-17 08:45:30

ifelseJava

2022-03-10 07:39:33

.NET部署模式

2014-08-08 10:20:23

Git版本管理系統

2021-04-27 20:04:11

策略模式設計
點贊
收藏

51CTO技術棧公眾號

亚洲一区亚洲二区| 中文字幕久久久| a在线视频观看| 日韩在线无毛| 日韩高清电影一区| 久久精品人人做人人爽| 岛国av免费观看| 亚洲精品中文字幕| 国产精品久久久久久一区二区三区 | 日韩一二三四| 青青草91视频| 欧美激情第1页| 先锋影音av在线| 日韩精品免费视频一区二区三区 | 国产一区二区三区在线免费| 手机亚洲第一页| 久久精品国产秦先生| 高清一区二区三区四区五区| 国产伦精品一区二区三区视频女| 青青青国产精品| 亚洲国产精品一区二区久久| 日韩视频在线播放| 亚洲美女福利视频| 蜜臀av一区二区三区| 午夜精品久久久久久久久久久久久| 99精品欧美一区二区| 99国产精品免费网站| 欧美亚洲综合网| 欧美啪啪免费视频| 爆操欧美美女| 国产精品三级av| 久久久亚洲综合网站| a级片免费观看| 日日夜夜免费精品视频| 久久久噜噜噜久久| 国产免费美女视频| 国产a久久精品一区二区三区| 欧美一二三区精品| 日韩爱爱小视频| 成人欧美大片| 午夜精品久久久久久| www.亚洲一区二区| 日本视频在线免费观看| 久久欧美一区二区| 国产在线精品一区| 性欧美8khd高清极品| 久久精品国产77777蜜臀| 欧美专区在线播放| 人人干人人干人人干| 牛夜精品久久久久久久99黑人| 一区二区三区日韩在线| 日韩av一二区| 免费看久久久| 日韩欧美亚洲一区二区| www.五月天色| 久久er热在这里只有精品66| 在线中文字幕一区| 自拍日韩亚洲一区在线| 牛牛电影国产一区二区| 专区另类欧美日韩| 国产av第一区| 国产激情在线| 亚洲精品国产成人久久av盗摄| 9999在线观看| 国产黄色小视频在线| 亚洲女子a中天字幕| 在线免费观看成人网| 生活片a∨在线观看| 国产欧美一区二区精品性| 日韩一区不卡| 免费日本一区二区三区视频| 国产精品久久久久久户外露出| 中文视频一区视频二区视频三区| 黄色大片在线播放| 亚洲女女做受ⅹxx高潮| 欧美中日韩在线| 国产激情视频在线看| 欧美午夜精品久久久久久久| 日韩中文字幕免费在线| 久久麻豆视频| 日韩精品一区二区三区中文不卡| 美女黄色一级视频| 中文字幕精品影院| 日韩在线中文字| 欧美人妻精品一区二区免费看| 亚洲国产一区二区精品专区| 2020国产精品视频| 亚洲中文无码av在线| 国产在线播放一区二区三区| 国产精品毛片一区视频| 免费av在线电影| 国产精品免费久久| 青青在线视频免费观看| 中文字幕在线免费观看视频| 欧美日韩在线三区| 国产伦理在线观看| 在线一级成人| 欧美精品一区二区三区国产精品| 国产精品黄色网| 久久99精品久久久久久久久久久久| 97人摸人人澡人人人超一碰| av女名字大全列表| 国产精品麻豆久久久| 日本欧美视频在线观看| 国产成人a视频高清在线观看| 欧美电影精品一区二区| 日本理论中文字幕| 在线看片日韩| 成人信息集中地欧美| 婷婷视频在线观看| 亚洲欧美综合另类在线卡通| 日本www在线视频| 国产视频网站一区二区三区| 日韩精品极品视频| 午夜69成人做爰视频| 日韩二区三区四区| 国产日韩一区欧美| 黄色在线免费网站| 色综合天天视频在线观看| 日本高清免费观看| 国产一区二区在线| 97精品国产91久久久久久| 一二三区中文字幕| 91在线播放网址| 久青草视频在线播放| 亚洲日本免费电影| 永久免费看mv网站入口亚洲| 在线观看免费国产视频| 国产一区二区女| 亚洲二区三区四区| 中国字幕a在线看韩国电影| 欧美草草影院在线视频| 亚洲综合久久av一区二区三区| 蜜桃久久av| 国产一区二区免费在线观看| 91麻豆一二三四在线| 欧美日韩精品是欧美日韩精品| 成人片黄网站色大片免费毛片| 韩日成人在线| 91精品国产高清久久久久久91裸体| 99se视频在线观看| 在线观看免费成人| 自拍偷拍亚洲天堂| 亚洲中午字幕| 免费电影一区| 波多野结衣久久精品| 亚洲黄色片网站| 国产一级生活片| 成人午夜看片网址| 337p亚洲精品色噜噜狠狠p| 成人免费观看49www在线观看| 在线成人激情视频| 中国老头性行为xxxx| 国产三级精品三级在线专区| 50路60路老熟妇啪啪| 欧美人与牛zoz0性行为| 国产不卡一区二区在线播放| 久久综合九色综合久| 日韩欧美亚洲成人| 女人又爽又黄免费女仆| 日韩精品电影在线观看| 亚洲成人网上| 啪啪av大全导航福利综合导航 | dy888午夜| 人妻在线日韩免费视频| 国产不卡一二三区| 国内外成人免费激情在线视频| 天堂av免费在线观看| 9人人澡人人爽人人精品| 欧美一级爱爱视频| 国产精品久久免费视频| 久久精品国产亚洲| 国产乱淫a∨片免费视频| 亚洲欧美中日韩| www.污污视频| 日韩av久操| 96sao精品视频在线观看| 二区在线播放| 91精品国产欧美一区二区| 国产一区二区三区在线视频观看| 国精产品一区一区三区mba视频| 国产精品久久7| 亚洲男人av| 亚洲天堂免费观看| 精品乱码一区内射人妻无码| 国产欧美视频一区二区| 在线免费av播放| 亚洲综合自拍| 波多野结衣久草一区| 岛国av免费在线观看| 亚洲人成电影在线播放| 中文字幕人妻一区二区三区视频 | 亚洲成人av资源| 91av在线免费| 麻豆freexxxx性91精品| 国产女主播自拍| 九九热爱视频精品视频| 国产综合香蕉五月婷在线| 91一区二区三区在线| 亚洲免费视频观看| 这里只有精品6| 亚洲国产成人av| 亚洲精品国产91| 久久91精品国产91久久小草 | 国产乱色在线观看| 亚洲经典中文字幕| 一卡二卡三卡在线| 午夜精品久久久久久久99樱桃| 在线观看免费小视频| 国产九九视频一区二区三区| 激情五月开心婷婷| 在线中文字幕第一区| 你懂的网址一区二区三区| 亚洲va欧美va人人爽成人影院| 欧美亚洲国产另类| 含羞草www国产在线视频| 日韩精品小视频| 国产精品久久久国产盗摄| 色综合久久99| 久久久久久久极品内射| 中文字幕欧美三区| 日本japanese极品少妇| 久久99精品国产麻豆不卡| 欧美 国产 日本| 亚洲字幕久久| 亚洲欧美精品| 亚洲尤物av| 超碰国产精品久久国产精品99| 香蕉久久免费电影| 性日韩欧美在线视频| a视频在线免费看| 日韩av在线播放资源| 亚洲免费国产视频| 欧美一区二区三区色| 中文天堂在线资源| 91福利区一区二区三区| 久久精品国产成人av| 亚洲综合色噜噜狠狠| 免费国产羞羞网站美图| 欧美极品aⅴ影院| 黄色网址在线视频| 99热在这里有精品免费| 国产精品91av| 国产馆精品极品| 99热这里只有精品2| 狠狠色丁香久久婷婷综合_中| 久久久久久三级| 久久久一二三| 国产三级日本三级在线播放| 久久国产精品久久久久久电车| 日韩av中文字幕第一页| 黄色成人在线网址| 国产欧美精品aaaaaa片| 国产专区一区| 久久久久久久久久伊人| 66国产精品| 国产精品久久久影院| 天天揉久久久久亚洲精品| 强伦女教师2:伦理在线观看| 色无极亚洲影院| 亚洲欧洲精品一区| 99精品电影| 亚洲天堂第一区| 国产在线成人| 久久精品视频16| 久久深夜福利| 免费成人黄色大片| 国产毛片精品视频| 日批视频免费看| 岛国精品一区二区| 少妇精品一区二区三区| 国产三级一区二区| 性欧美疯狂猛交69hd| 亚洲色图20p| 日本一二三区不卡| 一本久道久久综合中文字幕| 亚洲男人天堂网址| 欧美美女一区二区| 欧美 日韩 国产 精品| 日韩国产精品视频| 91在线网址| 久久精品在线视频| 91超碰在线免费| 日本高清视频一区| 日本亚洲欧洲无免费码在线| 99在线观看视频网站| 欧美18免费视频| 五月婷婷综合色| 欧美激情亚洲| 好吊妞无缓冲视频观看| 日本一不卡视频| 精品人妻一区二区三| 白白色亚洲国产精品| 国产精品酒店视频| 亚洲自拍偷拍av| 日本一本在线观看| 欧美一区二区视频网站| 色网站在线免费观看| 色爱精品视频一区| 91美女主播在线视频| 国产成人在线精品| 日本在线成人| 欧美中日韩一区二区三区| 亚洲精品久久| 奇米精品一区二区三区| 青青草国产精品97视觉盛宴| 又黄又爽又色的视频| 久久先锋影音av| 日韩欧美a级片| 欧美日韩久久久一区| 天堂av资源网| zzijzzij亚洲日本成熟少妇| 综合另类专区| 97人人做人人人难人人做| 国产精品一区高清| 欧美一级视频在线播放| 免费观看30秒视频久久| 国产又黄又粗又猛又爽的视频| 国产精品久久午夜| 国产视频1区2区| 亚洲成av人影院在线观看| av中文资源在线| 欧美亚洲成人xxx| 国产精品毛片av| 日本在线视频www色| 免费精品99久久国产综合精品| 国产无套精品一区二区三区| 国产精品国产三级国产专播品爱网| 五月天婷婷丁香| 欧美一区二区视频在线观看2022| 亚洲 欧美 自拍偷拍| 欧美日韩高清在线观看| 九九热这里有精品| 欧美日韩一区二区视频在线| 亚洲美女一区| 五月天丁香社区| 亚洲女女做受ⅹxx高潮| 日本欧美www| 国产亚洲精品久久久久动| 欧美男人天堂| 国产一区二区精品在线| 伊人成人在线| 麻豆tv在线观看| 亚洲免费视频成人| www.久久色| 精品综合久久久久久97| 美女精品久久| 国产免费一区二区三区四在线播放| 蜜桃91丨九色丨蝌蚪91桃色| 色一情一交一乱一区二区三区 | 潘金莲一级淫片aaaaaa播放| 日韩成人黄色av| 蜜桃麻豆av在线| 成人影片在线播放| 亚洲电影成人| 大尺度做爰床戏呻吟舒畅| 亚洲国产wwwccc36天堂| 亚洲区小说区图片区| 91精品国产91久久久久久久久| 国产欧美啪啪| 国产主播在线看| 久久久精品tv| 亚洲天堂视频在线播放| 亚洲国产精品va在线看黑人动漫 | 97免费在线视频| 卡通动漫精品一区二区三区| 男人日女人逼逼| 久久综合九色综合久久久精品综合| 五月婷婷开心网| 一区二区在线视频播放| 欧美一级网址| 久久久久亚洲av无码专区喷水| 国产成人亚洲综合色影视| 免费看一级一片| 亚洲精品xxxx| 天堂а√在线最新版中文在线| 欧洲精品一区色| 久久电影网站中文字幕| 久草成人在线视频| 亚洲精品国产精品自产a区红杏吧| 忘忧草在线影院两性视频| 欧美日韩在线播放一区二区| 久久综合综合久久综合| 福利所第一导航| 日韩成人av一区| 男人亚洲天堂| 国产二区视频在线| 久久精品欧美一区二区三区麻豆| 中文字幕在线视频免费| 欧美久久精品一级黑人c片| 国产成人精品福利| 给我免费播放片在线观看| 国产视频亚洲色图| www.国产精品视频| 97视频在线观看网址| 日韩免费视频| 韩国三级视频在线观看| 欧美在线免费观看视频| 俄罗斯一级**毛片在线播放 | 毛片免费在线观看|