美文网首页
策略模式

策略模式

作者: 小幸运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