1.介紹
在策略模式(strategy pattern)中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。比如我們在計算兩個數字的時候,會有數字相加,數字相減,數字相乘,數字相除幾種方法,一般做法,我們會用乙個 if…else 來判斷,但是這樣有乙個不好的地方就是**複雜化,不利於維護,這時候可以使用策略模式。
2.**例項
未使用策略模式的**寫法:
public int getresult(string type, int
num1, int
num2) else
if (type.equals(
"substract")) else
if (type.equals(
"multiply")) else
if (type.equals(
"division"))
return
0; }
我們可以看出有個弊端,當這個型別特別多,而且每個型別裡面還有自己的演算法,如果演算法比較複雜的話整個條件的控制**會變得很長,難以維護。為了解決這個問題,我們可以使用策略模式。
先建乙個介面:
package com.tl.skyline.pattern.strategypattern;
/** * created by tl on 17/3/9.
*/public
inte***ce
strategy
不同的演算法,實現方式:
operationadd:
package com.tl.skyline.pattern.strategypattern;
/** * created by tl on 17/3/9.
*/public
class
operationadd
implements
strategy
}
operationsubstract:
package com.tl.skyline.pattern.strategypattern;
/** * created by tl on 17/3/9.
*/public
class
operationsubstract
implements
strategy
}
operationmultiply:
package com.tl.skyline.pattern.strategypattern;
/** * created by tl on 17/3/9.
*/public
class
operationmultiply
implements
strategy
}
上下文,檢視當它改變策略 strategy 時的行為變化:
package com.tl.skyline.pattern.strategypattern;
/** * created by tl on 17/3/9.
*/public
class
context
public
intexecutestrategy(int num1, int num2)
}
測試:
package com.tl.skyline.pattern.strategypattern;
/** * created by tl on 17/3/9.
*/public
class
strategypatterndemo
}
輸出:
10 + 5 =15
10 - 5 = 5
10 * 5 = 50
在實際中,spring的ioc就用到了策略模式,通過@resource註解管理,注入哪個就使用哪個。 java 設計模式之策略模式
策略模式非常簡單,也不再舉例子了,它其實就是根據clinet選擇的不同,執行不同的 避免了if.else 和switch case 的不方便和耦合。甚至說你可能平常經常用,只是不知道這是策略模式。類圖 對於擁有公共介面的first,second,third,給clinet提供乙個類context 去...
java設計模式之策略模式
很久沒有更新過設計模式的學習了,最近在看的幾種設計模式在專案實際開發過程中不常用,所以並沒有彙總成部落格寫出來 這一次介紹的是策略模式。策略模式和工廠模式的思想有點類似,都是把物件或資料的獲取封裝起來,需要使用的時候傳入相應的引數獲取相關的物件或資料。工廠模式是對建立物件進行封裝,乙個對操作行為進行...
java設計模式之策略模式
uml設計 定義以及使用場景 定義一系列演算法,將每個演算法單獨封裝,使之可以相互替換,具體方法策略的選擇由客戶端決定,一般適用於多選一的場景。示例 定義乙個介面message,定義兩個類qq wx 都實現了message介面,定義乙個類messagecontroller,訊息控制中心,決定執行me...