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

