輕松掌握Java策略模式
定義:一個類的行為或其算法可以在運行時更改。在策略模式中,我們創(chuàng)建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執(zhí)行算法。
特點:
1、算法可以自由切換。
2、避免使用多重條件判斷。
3、擴展性良好。
企業(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); } }
策略模式強調(diào)的是運行時更改,可能在上面的代碼中,這種運行時更改沒有得到很好的體現(xiàn),我們可以假設(shè)一個實際場景,就是當(dāng)一個對象參數(shù)傳到一個方法中來的時候,假設(shè)我們要根據(jù)參數(shù)的不同選擇不同的方法,我們這是會考慮if-else來進行判斷,而策略模式則是對這些if-else進行分類,每一個判斷一個類,然后對象過來了,直接調(diào)用策略接口方法,而對象參數(shù)屬于哪個具體類則是有jvm來判斷,我們不必要去了解對象參數(shù)屬性類型什么的,這樣不僅簡化了我們的開發(fā)工作,而且相比較于if-else,這樣有更好的擴展性。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Nacos1.4.0 Windows10單機模式啟動和集群啟動過程解析
這篇文章主要介紹了Nacos1.4.0 Windows10單機模式啟動和集群啟動,第一次使用nacos,廢話不多說,記錄下自己啟動Nacos遇到的坑,感興趣的朋友跟隨小編一起看看吧2023-10-10SpringBoot啟動后立即執(zhí)行的幾種方法小結(jié)
在項目開發(fā)中某些場景必須要用到啟動項目后立即執(zhí)行方式的功能,本文主要介紹了SpringBoot啟動后立即執(zhí)行的幾種方法小結(jié),具有一定的參考價值,感興趣的可以了解一下2023-05-05關(guān)于使用Mybatisplus自帶的selectById和insert方法時的一些問題
這篇文章主要介紹了關(guān)于使用Mybatisplus自帶的selectById和insert方法時的一些問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08如何使用pipeline和jacoco獲取自動化測試代碼覆蓋率
這篇文章主要介紹了如何使用pipeline和jacoco獲取自動化測試代碼覆蓋率,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11KafkaListener注解的實現(xiàn)機制源碼解析
這篇文章主要為大家介紹了KafkaListener注解的實現(xiàn)機制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10