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