Go Strategy 策略设计模式

package main

import "fmt"

// Strategy 模式应用场景,在我们写的程序中,大多有if else的条件语句基本上都适合
// Strategy 模式,但是if else 条件的情况是不变的,则不适合此模式,例如一周7天
// Strategy 及其子类为组建提供了一系列可重用的算法,从而使得类型在运行时方便的根据
// 需要在各个算法之间进行切换

//一般的做法

/*
type API struct {

}
// 这个主题时变化不稳定的,没有可扩展性
func (a *API) Recognition(name string){
	if name == "ali"{
		fmt.Println("ali api调用")
	}else if name == "baidu"{
		fmt.Println("baidu api调用")
	}else if name == "xunfei"{
		fmt.Println("xunfei api调用")
	}
	//...如果有其他新的在此添加
}
*/
// ====================下面是用Strategy设计模式=====================

// ==============稳定===============
// 定义一个api接口,添加一个抽象方法 Recognition()
type IAPI interface {
	Recognition()
}

type API struct {
 	// 这里个人认为不是继承而是组合,在重构关键技法中这也是一种提倡做法,继承——>组合
	iapi IAPI
}

func (a *API) OnProgress(){
	// 运行时动态改变
	a.iapi.Recognition()
}

// ==============变化可扩展的==================
// ali 接口
type Ali struct {

}
// 实现Recognition()抽象方法
func (a *Ali) Recognition(){
	fmt.Println("ali api 调用")
}

// bai 接口
type Bai struct {

}
// 实现Recognition()抽象方法
func (b *Bai) Recognition(){
	fmt.Println("baidu api 调用")
}



func main(){
	// 当然如果要彻底解决if else 的问题, 还需要工厂模式进行配合使用
	// 这里就不增加工厂模式,只是一个纯粹的strategy模式
	api := new(API)
	api.iapi = new(Ali)
	api.iapi.Recognition()

	api.iapi = new(Bai)
	api.iapi.Recognition()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值