Golang 策略设计模式

目的:根据不同策略来执行对象的相应操作

和工厂模式很像,不同点在于:

工厂模式是传入参数后创建对象,根据传入的参数写逻辑来判断应该创建什么类型的对象,模式的使用者调用对象统一的方法操作。

策略模式是模式的使用者必须先创建好对象,将该对象作为参数传进去,然后通过该对象调用相应的方法。

设计场景如下:

吃饭的时候,我们有三种主食可以选,米饭、面包和面条。

golang代码:

Copy
package main import "fmt" // 定义类接口 type StapleFood interface { Eat() } // 定义接口实现类 1 type RiceStapleFood struct{} // 定义接口实现类 2 type NoodleStapleFood struct{} // 定义接口实现类 3 type BreadStapleFood struct{} // 策略类 type ContextEat struct { stapleFood StapleFood } // 实现类1, 方法实现 func (f *RiceStapleFood) Eat() { fmt.Println("米饭") } // 实现类2, 方法实现 func (f *NoodleStapleFood) Eat() { fmt.Println("面条") } // 实现类3, 方法实现 func (f *BreadStapleFood) Eat() { fmt.Println("面包") } // 策略类方法实现 func (c *ContextEat) EatFood() { c.stapleFood.Eat() } // 策略类构造方法 func NewContextEat(s StapleFood) *ContextEat { return &ContextEat{stapleFood: s} } func main() { // 测试 eat01 := NewContextEat(new(RiceStapleFood)) eat01.EatFood() eat02 := NewContextEat(new(NoodleStapleFood)) eat02.EatFood() eat03 := NewContextEat(new(BreadStapleFood)) eat03.EatFood() }
posted @   ZhiChao&  阅读(653)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示