Code
简单实现一个策略模式,吃不同的水果
strategy.go
package strategy
import "fmt"
const (
Apple = "apple"
Strawberry = "strawberry"
)
type PersonActionStrategy interface {
Eat(name string)
Fly()
}
var strategys = map[string]PersonActionStrategy{
"apple": appleStrategy{},
"strawberry": strawberryStrategy{},
}
type appleStrategy struct{}
type strawberryStrategy struct{}
func (s appleStrategy) Eat(name string) {
fmt.Println(fmt.Sprintf("%s eat an apple", name))
}
func (s strawberryStrategy) Eat(name string) {
fmt.Println(fmt.Sprintf("%s eat a strawberry", name))
}
func (s appleStrategy) Fly() {
fmt.Println("apple fly")
}
func (s strawberryStrategy) Fly() {
fmt.Println("strawberry fly")
}
func NewPersonActionStrategy(fruit string) PersonActionStrategy {
return strategys[fruit]
}
strategy_test.go
package strategy
import "testing"
func TestEatFruit(t *testing.T) {
NewPersonActionStrategy(Apple).Eat("Bill")
NewPersonActionStrategy(Strawberry).Eat("Bill")
NewPersonActionStrategy(Apple).Fly()
NewPersonActionStrategy(Strawberry).Fly()
}
run
=== RUN TestEatFruit
Bill eat an apple
Bill eat a strawberry
apple fly
strawberry fly