設計模式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 不用改變,而還款策略可以根據策略模板不斷的擴展。核心思想就是主體是不變動的,還款方式是變動的,抽象變動的。

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