美文网首页
策略模式

策略模式

作者: 小幸运Q | 来源:发表于2021-02-24 15:37 被阅读0次
  • 改接口匹配的对象实现策略更改

一个类的行为或其他算法可以在运行时更改。使用switch...case或者if...else也行,但是很麻烦,新的需求需要修改源代码。

image.png
  • interface 无法指向func 做函数指针,只能 var v func(string)
package main

import "fmt"

/*出行方式*/
type Itravel interface {
    Travel()
}

/*飞机*/
type Aircraft struct{}

/*火车*/
type Train struct{}

/*走路*/
type Walk struct{}

/*具体策略类 1:飞机出行*/
func (this Aircraft) Travel() {
    fmt.Println("飞机出行")
}

/*具体策略类 2:火车出行*/
func (this Train) Travel() {
    fmt.Println("火车出行")
}

/*具体策略类 3:走路出行*/
func (this Walk) Travel() {
    fmt.Println("走路出行")
}

/*环境类*/
type User struct {
    Name    string
    Itravel Itravel
}

func (this User) travel() {
    fmt.Printf("%s", this.Name)
    this.Itravel.Travel()
}

func main() {
    user := User{"张三", Aircraft{}}
    user.travel()

    user = User{"李四", new(Train)}
    user.travel()

    user = User{"王五", &Walk{}}
    user.travel()
}

相关文章

网友评论

      本文标题:策略模式

      本文链接:https://www.haomeiwen.com/subject/xgocfltx.html