日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式--策略(Strategy)模式

發(fā)布時(shí)間:2025/3/21 asp.net 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式--策略(Strategy)模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

模式定義

定義一系列算法,把它們一個(gè)個(gè)封裝起來,并且使它們可互相替換(變化),該模式使得算法可獨(dú)立于使用它的客戶程序(穩(wěn)定)而變化(擴(kuò)展,子類化)

類圖

要點(diǎn)總結(jié)

  • Strategy及其子類為組件提供了一系列可重用的算法,從而可以使得類型在運(yùn)行時(shí)方便地根據(jù)需要在各個(gè)算法之間進(jìn)行交換
  • Strategy模式提供了用條件判斷語(yǔ)句以外的另一種選擇,消除條件判斷語(yǔ)句,就是解耦合。含有許多條件判斷語(yǔ)句的代碼通常都需要Strategy模式
  • 如果Strategy對(duì)象沒有實(shí)例變量,那么各個(gè)上下文可以共享一個(gè)Strategy對(duì)象,從而節(jié)省對(duì)象開銷

Go語(yǔ)言代碼實(shí)現(xiàn)

工程目錄

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-N7fDlqPO-1626705006764)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6d34aa329b7c4d359b25560947dfbce7~tplv-k3u1fbpfcp-watermark.image)]


strategy.go

package Strategy//策略接口 type Strategy interface {Execute() }

strategyA.go

package Strategyimport "fmt"//策略A type strategyA struct {}//實(shí)現(xiàn)接口 func (s *strategyA) Execute(){fmt.Println("A plan executed.") }//簡(jiǎn)單工廠方法 func NewStrategyA() Strategy {return &strategyA{} }

strategyB.go

package Strategyimport "fmt"//策略B type strategyB struct {}//實(shí)現(xiàn)接口 func (s *strategyB) Execute() {fmt.Println("B plan executed.") }//簡(jiǎn)單工廠方法 func NewStrategyB() Strategy {return &strategyB{} }

context.go

package Strategy//上下文,也可以理解為主邏輯 type Context struct {strategy Strategy }//多態(tài)方法 func NewContext() *Context {return &Context{} }//多態(tài)設(shè)置具體的對(duì)象 func (c *Context) SetStrategy(strategy Strategy) {c.strategy = strategy }//多態(tài)方法執(zhí)行具體策略 func (c *Context) Execute(){c.strategy.Execute() }

strategy_test.go

package Strategyimport "testing"func TestContext_Execute(t *testing.T) {strategyA := NewStrategyA()c := NewContext()c.SetStrategy(strategyA)c.Execute()strategyB := NewStrategyB()c.SetStrategy(strategyB)c.Execute() }

總結(jié)

以上是生活随笔為你收集整理的设计模式--策略(Strategy)模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。