golang 策略模式

策略模式
策略模式定义了算法族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化独立于使用算法的客户。

go不同于java,本身没有继承的概念,天然只支持接口的组合模式。符合设计原则:多用组合,少用继承。策略模式是把变化的部分抽象出来,封装成单独的接口,然后在主接口利用“委托”(组合)的方式调用变化的部分,因为变化的部分单独成一个接口,所以它的各种实现直接可以互相替换,达到随时改变,添加,删除,不会影响到已经实现的代码部分,下面是示例代码,分析也写在了注解里面

type Interface1 interface {
	Eat()
	SayHello   // 这是变化的部分,不同的对象打招呼方式不同
}

type SayHello interface {
	Hi()
}
// 下面分别是SayHello的两个实现C 和 A
type C struct {}

func (c *C)Hi() {
	fmt.Println("你好")  
}

type A struct {}

func (a *A) Hi() {
	fmt.Println("hello")
}


type Act struct {  // Act实现了Interface1,使用组合的方式,包含了SayHello的接口
	I SayHello
}

func (act *Act) Eat() {
	fmt.Println("i want eat")
}

func (act *Act) Hi() { // Act打招呼的方式委托给了SayHello处理
	act.I.Hi()
}

func (act *Act) SetI(i SayHello) {  // 提供一个方法可以随时修改打招呼的方式
	act.I = i
}

func main() {
	act := new(create.Act)
	act.I = new(create.A)
	act.Eat()
	act.Hi()
	
	act.SetI(new(create.C))
	act.Hi()
}

这样子有两个好处,以后再来一个不同的打招呼方式,直接实现SayHello就好了,在构建的Act的时候改变SayHello为具体的实现就可以;也可以通过SetI的方式修改SayHello的方式。这样就把SayHello这部分变化从原来的代码逻辑独立出来,方便后期扩展。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值