意圖:
定義一系列的演算法,把它們一個個封裝起來, 並且使它們可相互替換。
關鍵程式碼:
實現同一個介面
應用例項:
- 主題的更換,每個主題都是一種策略
- 旅行的出遊方式,選擇騎自行車、坐汽車,每一種旅行方式都是一個策略
- JAVA AWT 中的 LayoutManager
Go實現策略模式
package strategy
// 策略模式
// 實現此介面,則為一個策略
type IStrategy interface {
do(int, int) int
}
// 加
type add struct{}
func (*add) do(a, b int) int {
return a + b
}
// 減
type reduce struct{}
func (*reduce) do(a, b int) int {
return a - b
}
// 具體策略的執行者
type Operator struct {
strategy IStrategy
}
// 設定策略
func (operator *Operator) setStrategy(strategy IStrategy) {
operator.strategy = strategy
}
// 呼叫策略中的方法
func (operator *Operator) calculate(a, b int) int {
return operator.strategy.do(a, b)
}
測試用例
package strategy
import (
"fmt"
"testing")
func TestStrategy(t *testing.T) {
operator := Operator{}
operator.setStrategy(&add{})
result := operator.calculate(1, 2)
fmt.Println("add:", result)
operator.setStrategy(&reduce{})
result = operator.calculate(2, 1)
fmt.Println("reduce:", result)
}
具體程式碼
更詳細的程式碼可參考:https://github.com/pibigstar/go-demo 裡面包含了 Go 常用的設計模式、Go 面試易錯點、簡單的小專案(區塊鏈,爬蟲等)、還有各種第三方的對接(redis、sms、nsq、elsticsearch、alipay、oss...),如果對你有所幫助,請給個 Star
,你的支援,是我最大的動力!
本作品採用《CC 協議》,轉載必須註明作者和本文連結