輕松掌握J(rèn)ava策略模式
定義:一個類的行為或其算法可以在運(yùn)行時更改。在策略模式中,我們創(chuàng)建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執(zhí)行算法。
特點:
1、算法可以自由切換。
2、避免使用多重條件判斷。
3、擴(kuò)展性良好。
企業(yè)級開發(fā)和常用框架中的應(yīng)用:java.servlet.http.HttpServlet的service方法
實例:對兩個數(shù)的操作行為。
public class Demo {
public static void main(String[] args) {
Strategy strategy1 = new StrategyAdd();
Strategy strategy2 = new StrategyDiv();
Context context1 = new Context(strategy1);
context1.execute(10, 5);
context1 = new Context(strategy2);
context1.execute(10, 5);
}
}
interface Strategy{
public void doOperation(int num1,int num2);
}
class StrategyAdd implements Strategy{
public void doOperation(int num1, int num2) {
System.out.println("執(zhí)行加法");
System.out.println(num1+"+"+num2+"="+(num1+num2));
}
}
class StrategySub implements Strategy{
public void doOperation(int num1, int num2) {
System.out.println("執(zhí)行減法");
System.out.println(num1+"-"+num2+"="+(num1-num2));
}
}
class StrategyMul implements Strategy{
public void doOperation(int num1, int num2) {
System.out.println("執(zhí)行乘法");
System.out.println(num1+"*"+num2+"="+(num1*num2));
}
}
class StrategyDiv implements Strategy{
public void doOperation(int num1, int num2) {
System.out.println("執(zhí)行除法");
System.out.println(num1+"/"+num2+"="+(num1/num2));
}
}
class Context{
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void execute(int num1,int num2){
strategy.doOperation(num1, num2);
}
}
策略模式強(qiáng)調(diào)的是運(yùn)行時更改,可能在上面的代碼中,這種運(yùn)行時更改沒有得到很好的體現(xiàn),我們可以假設(shè)一個實際場景,就是當(dāng)一個對象參數(shù)傳到一個方法中來的時候,假設(shè)我們要根據(jù)參數(shù)的不同選擇不同的方法,我們這是會考慮if-else來進(jìn)行判斷,而策略模式則是對這些if-else進(jìn)行分類,每一個判斷一個類,然后對象過來了,直接調(diào)用策略接口方法,而對象參數(shù)屬于哪個具體類則是有jvm來判斷,我們不必要去了解對象參數(shù)屬性類型什么的,這樣不僅簡化了我們的開發(fā)工作,而且相比較于if-else,這樣有更好的擴(kuò)展性。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java數(shù)學(xué)歸納法非遞歸求斐波那契數(shù)列的方法
這篇文章主要介紹了java數(shù)學(xué)歸納法非遞歸求斐波那契數(shù)列的方法,涉及java非遞歸算法的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07
Java實現(xiàn)的連續(xù)奇數(shù)(n+2*x)是合數(shù)的算法題暴力算法
這篇文章主要介紹了Java實現(xiàn)的連續(xù)奇數(shù)(n+2*x)是合數(shù)的算法題暴力算法,本文包含運(yùn)算結(jié)果和實現(xiàn)代碼,需要的朋友可以參考下2014-09-09
Java 類型相互轉(zhuǎn)換byte[]類型,Blob類型詳細(xì)介紹
這篇文章主要介紹了Java 類型相互轉(zhuǎn)換byte[]類型,Blob類型的相關(guān)資料,需要的朋友可以參考下2016-10-10
spring AOP代理執(zhí)行@EnableAspectJAutoProxy的exposeProxy屬性詳解
這篇文章主要為大家介紹了spring AOP代理執(zhí)行@EnableAspectJAutoProxy的exposeProxy屬性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Java多線程并發(fā)編程(互斥鎖Reentrant Lock)
這篇文章主要介紹了ReentrantLock 互斥鎖,在同一時間只能被一個線程所占有,在被持有后并未釋放之前,其他線程若想獲得該鎖只能等待或放棄,需要的朋友可以參考下2017-05-05
SpringBoot使用validation做參數(shù)校驗的實現(xiàn)步驟
這篇文章主要介紹了SpringBoot使用validation做參數(shù)校驗的實現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot,感興趣的朋友可以了解下2021-05-05

