日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/21 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式--策略(Strategy)模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模式定義

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

類圖

要點總結

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

Go語言代碼實現

工程目錄

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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 {}//實現接口 func (s *strategyA) Execute(){fmt.Println("A plan executed.") }//簡單工廠方法 func NewStrategyA() Strategy {return &strategyA{} }

strategyB.go

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

context.go

package Strategy//上下文,也可以理解為主邏輯 type Context struct {strategy Strategy }//多態方法 func NewContext() *Context {return &Context{} }//多態設置具體的對象 func (c *Context) SetStrategy(strategy Strategy) {c.strategy = strategy }//多態方法執行具體策略 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() }

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。