8 2 1 策略設計模式

2021-08-25 22:00:52 字數 714 閱讀 9754

8.2.1 策略設計模式

在執行時,如果應用程式需要在幾種演算法之間,或一種演算法的幾個部分之間進行選擇的話,策略模式是非常有用的。一種常見的情況是,當我們的應用程式需要執行的幾個任務,只在較小的子任務上是不同的。使用策略模式,對於任務的公用部分,我們可以只寫一次,加上引數化,把子任務(原操作)作為引數值。圖 8.1 顯示了策略模式的物件導向的表示。

圖 8.1 strategy 是乙個介面,有乙個方法表示原始操作。兩個具體的策略實現不同的操作,context 類可以在這些實現之間選擇

把任務引數化的想法,是給它乙個子任務作為引數值,有可能使策略模式在函式式程式設計中的表現相當清晰:它只是乙個高階函式。圖 8.1 中的 strategy 介面有乙個單獨的方法,表明它是乙個簡單的函式;實現它的兩個類是有效的具體函式,可以使用 lambda 函式建立。

在支援函式的語言中,我們可以用適當的函式(在 c# 中的 func 委託或 f# 中的函式型別)替換 strategy 介面。 通常情況下,我們直接把這個策略作為引數值,傳遞給 operation 方法。使用圖 8.1 中的抽象名,我們可以寫

context.operation(arg => );

我們已經看到了這種模式在篩選列表時的實際例子。在這種情況下,這個函式指定的謂詞是乙個具體的戰略(我們可以使用不同的策略來寫不同的篩選器),list.filter 函式或 where 方法是在背景中操作。這意味著,在支援高階函式的語言中,你可以隨時用高階函式替換這個r策略模式。

設計模式 策略設計模式

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

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

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

設計模式 策略模式

策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些方法完成的都是相同的工作,只是實現不同,他們可以用相同的方式呼叫所有的演算法,減少了演算法類和使用演算法類之間的耦合.優點 策略模式的strategy類層次為context定義了一系列可供重用的演算法和行為,繼承有助於吸取這些演算法中的公共...