设计模式--策略(Strategy)模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式--策略(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
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式--模板方法(Template
- 下一篇: 设计模式--观察者(Observer)模