设计模式golang-策略模式

策略模式

定义

定义算法族,分别封装起来,让他们相互可以替换,此模式让算法的变化独立于使用算法的客户(head first 设计模式书中定义)。在golang 中相当于一个interface 抽象方法类,各个结构体来实现interface 抽象的方法。

角色

  1. 调用策略主体
  2. 策略模板
  3. 策略具体实现

例子

小明同学还信用卡,还的方式有很多例如支付宝、微信等方式

1.定义抽象策略模板

type Payment interface {
	Pay(amount int64)error
}

2.定义具体还款策略

type WechatPay struct{
}
func (w *WechatPay)Pay(amount int64)error{
	fmt.Println("wechat pay amount",amount)
	return nil
}

type ZhifubaoPay struct{
}
func (z *ZhifubaoPay)Pay(amount int64)error{
	fmt.Println("zhifubao pay amount",amount)
	return nil
}

3.定义调用策略主体

type PaymentCard struct{
   PayAmount int64
   PaymentType Payment
}

func (p *PaymentCard)PaymentMoney()error{
	if PaymentType != nil{
		return PaymentType.Pay(p.PayAmount)
	}
	return fmt.Errorf("not init paymentType")
}

4.使用

func main(){
	//微信还款
	xiaoMingPay := &PaymentCard{PayAmount:100,PaymentType:WechatPay{}}
	xiaoMingPay.PaymentMoney()
	//支付宝还款
	xiaoMingPay = &PaymentCard{PayAmount:100,PaymentType:ZhifubaoPay{}}
	xiaoMingPay.PaymentMoney()
}

5.总结

相当于是 小明还款的主体方法PaymentMoney 不用改变,而还款策略可以根据策略模板不断的扩展。核心思想就是主体是不变动的,还款方式是变动的,抽象变动的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章