Go 設計模式 策略模式

2021-09-07 11:44:41 字數 1549 閱讀 8417

策略模式定義了演算法家族,在呼叫演算法家族的時候不感知演算法的變化,客戶也不會受到影響。

下面用《大話設計模式》中的乙個例項進行改寫。

例:超市中經常進行**活動,**活動的**方法就是乙個個策略,如「滿一百減20」,「打八折」等。現在實現策略模式,用cashcontext生產策略,並完成策略的呼叫。

1.首先定義所有策略的介面。

package cash

type cashsuper inte***ce

2.定義三個子類,實現此介面

package cash

//普通情況,沒有折扣

type cashnormal struct

func newcashnormal() cashnormal

func (c cashnormal) acceptmoney(money float64) float64

package cash

//打折,傳入打折的折扣,如0.8

type cashrebate struct

func newcashrebate(rebate float64) cashrebate

func (c cashrebate) acceptmoney(money float64) float64

package cash

//直接返利,如滿100返20

type cashreturn struct

func newcashreturn(moneycondition float64, moneyreturn float64) cashreturn

func (c cashreturn) acceptmoney(money float64) float64

return money

}

3.最重要的時刻來臨了,定義cashcontext結構,用來做策略篩選

package cash

type cashcontext struct

func newcashcontext(cashtype string) cashcontext

return *c}

//在策略生產成功後,我們就可以直接呼叫策略的函式。

func (c cashcontext) getmoney(money float64) float64

4.呼叫測試

package main

import (

"cash"

"fmt")

func main()

/***************************************

輸出:100打八折實際金額為 80

199滿一百返20實際金額為 179

199沒有折扣實際金額為 199

*/

總結:策略模式解除了客戶對策略的感知,所有策略,甚至cashsuper皆為私有。只需要暴露cashcontext就可以生成策略。降低了耦合。

策略設計模式 Go語言設計模式 策略

策略設計模式 策略模式是一種行為設計模式。此模式允許在執行時不需要更改物件的型別定義時就能改變該物件的行為。用乙個例子來理解策略模式。假設構建乙個快取inmemorycache,它擁有固定的容量大小,當達到其最大容量時,快取中的某些舊項需要被逐出,這種驅逐可以通過幾種演算法來實現 現在的問題是如何將...

GO設計模式3 策略模式

所謂策略其實就是做一件事情有很多很多的方法,比如說乙個商場要搞 的方式有可能有很多 打折啊,滿100返50啊 積分等等之類的。這種不同的 方式在我們系統中表示就是乙個乙個的策略,並且策略是可以隨時更換的,這個時候在設計系統時就可以使用策略模式。type strategy inte ce策略一 typ...

設計模式 策略設計模式

策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...