策略設計模式
策略模式是一種行為設計模式。此模式允許在執行時不需要更改物件的型別定義時就能改變該物件的行為。
用乙個例子來理解策略模式。假設構建乙個快取inmemorycache,它擁有固定的容量大小,當達到其最大容量時,快取中的某些舊項需要被逐出,這種驅逐可以通過幾種演算法來實現:
現在的問題是如何將快取類與演算法分離,以便我們能夠在執行時選擇不同演算法。此外,在新增新演算法時,快取類也不需要被更改。這就是策略模式使用的地方。策略模式建立乙個演算法家族,每個演算法都有自己的類,這些類中的每乙個都遵循相同的介面,這使得演算法行為一致,同族的演算法可以互換。定義演算法的公共介面名為evictionalgo。
接下來在cache類中嵌入exectionalgo介面。cache類不用自己實現所有型別的逐出演算法,而是將其全部委託給evictionalgo介面。由於evictionalgo是乙個介面,我們就可以在執行時將演算法更改為lru、fifo、lfu,而不必對快取類做任何改動。
策略設計模式的使用場合:
注意在下面的策略模式uml圖,上下文(cache)嵌入了策略(evictionalgo)介面:
下面是示例**對應的uml圖:
下表是策略設計模式**元件:
下面是evictionalgo.go的**:
下面是fifo.go的**:
下面是lru.go的**:
下面是lfu.go的**:
下面是cache.go的**:
下面是main.go的**:
go語言設計模式-中介者
go語言設計模式-空物件
go語言設計模式-觀察者
go語言設計模式-狀態
go語言設計模式-備忘錄
Go 設計模式 策略模式
策略模式定義了演算法家族,在呼叫演算法家族的時候不感知演算法的變化,客戶也不會受到影響。下面用 大話設計模式 中的乙個例項進行改寫。例 超市中經常進行 活動,活動的 方法就是乙個個策略,如 滿一百減20 打八折 等。現在實現策略模式,用cashcontext生產策略,並完成策略的呼叫。1.首先定義所...
GO設計模式3 策略模式
所謂策略其實就是做一件事情有很多很多的方法,比如說乙個商場要搞 的方式有可能有很多 打折啊,滿100返50啊 積分等等之類的。這種不同的 方式在我們系統中表示就是乙個乙個的策略,並且策略是可以隨時更換的,這個時候在設計系統時就可以使用策略模式。type strategy inte ce策略一 typ...
設計模式 策略設計模式
策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...