JDP02 策略模式 不太理解

2021-09-01 13:55:26 字數 1518 閱讀 5703

策略模式是在給定的輸入條件下,實現某個目標的計畫或者方案。策略與演算法類似;演算法是定義好的過程,它能夠提供一組輸入產生乙個輸出。而策略是乙個計畫,它也涉及如何從一組輸入到一組輸出。在通常情況之下,與演算法相比,策略是能夠提供更大範圍的可選方案。因而,策略通常是代表一組或一簇相互替換的方案。

當電腦程式存在多種策略時,程式**會比較複雜。當有多個策略可用時,與策略相關的程式邏輯必須選擇其中乙個策略來執行,這時策略選擇的程式**可能變得很複雜,同時策略的邏輯通常也比較複雜,我們可以使用策略模式來整理這些**。

策略操作定義策略的輸入和輸出,而把策略的實現工作留給各個類。這些類以不同的方案來實現同乙個操作,它們為使用者提供同乙個介面,因而這些類可以相互替換。策略模式允許多種策略共存,而**不會混亂。策略模式也可以實現模式選擇邏輯和策略本身相分離。

它的意圖在於把可選的策略或方案封裝在不同的類中,並在這些類中實現乙個共同的操作。

例子相對簡單:

假如現在有四種策略可以提供給使用者選擇,根據使用者的不同情況進行選擇。當策略計畫簡單的有時候採用演算法方法比較簡單,但如果策略很複雜的時候,採用策略來管理我們的**會相對比較明智。

面對傳統的方法,我們很多時候都會採用面向過程式的方法去實現:

有如下策略

/*

*@author junin

*/public class stratery }/*

* 策略1

*@author junin

*/public class stratery1 extends stratery }/*

* 策略2

* @author junin

*/public class stratery2 extends stratery}/*

* 策略3

* @author junin

*/public class stratery3 extends stratery

}

傳統的實現方法如下:

public static stratery get(int cas)

}

根據使用者的情況返回。

下面僅對上面的**進行重構,使其成為strategy模式

定義乙個共同的介面:

public inte***ce advisor
每個策略方案都實現這個介面:

/*

* 策略1

* @author junin

*/public class stratery1 extends stratery implements advisor

public stratery1 getadvisor()

public string tostring()

}

最後利用介面實現策略呼叫:

public class new 

}public static void main(string args)

}

設計模式02 策略模式

場景1 人旅行,set不同的策略實現類,採用對應實現類裡的旅行策略辦法 eg 飛機策略實現類裡的策略方法,乘坐飛機旅行 場景21 如果在乙個系統裡面有許多類,它們之間的區別僅在於它們的行為,那麼使用策略模式可以動態地讓乙個物件在許多行 為中選擇一種行為。2 乙個系統需要動態地在幾種演算法中選擇一種。...

02 策略模式 Strategy

策略是為達到某一目的而採取的手段或方法,策略模式的本質是目標與手段的分離,手段不同而最終達成的目標一致。客戶只關心目標而不在意具體的實現方法,實現方法要根據具體的環境因素而變化。用我們每天上下班的方式來展開 我們上下班的交通方式有 1 步行 2 騎直行車 3 地鐵 4 開車 1 汽車 2 步行 3 ...

理解策略模式

title 理解策略模式 url tags 策略模式屬於行為型模式。定義了一系列的演算法,並將每乙個演算法單獨封裝起來,使每個演算法之間可以相互替換,並且演算法本身和使用演算法的客戶端是分割開來的。著重的不是如何實現演算法,而是系統如何根據客戶端的情況來選擇呼叫哪種演算法,從而使程式結構更加靈活,擴...