輕松掌握J(rèn)ava狀態(tài)模式
定義:在狀態(tài)模式(State Pattern)中,類的行為是基于它的狀態(tài)改變的。
特點(diǎn):
1、封裝了轉(zhuǎn)換規(guī)則。
2、枚舉可能的狀態(tài),在枚舉狀態(tài)之前需要確定狀態(tài)種類。
3、將所有與某個(gè)狀態(tài)有關(guān)的行為放到一個(gè)類中,并且可以方便地增加新的狀態(tài),只需要改變對(duì)象狀態(tài)即可改變對(duì)象的行為。
4、允許狀態(tài)轉(zhuǎn)換邏輯與狀態(tài)對(duì)象合成一體,而不是某一個(gè)巨大的條件語句塊。
5、可以讓多個(gè)環(huán)境對(duì)象共享一個(gè)狀態(tài)對(duì)象,從而減少系統(tǒng)中對(duì)象的個(gè)數(shù)。
企業(yè)及開發(fā)和常用框架中的應(yīng)用:
實(shí)例:
public class Demo { public static void main(String[] args) { Context context = new Context(); State move = new Move(); move.show(context); State stop = new Stop(); stop.show(context); } } class Context{ private State state; public void setState(State state){ System.out.println("給物體加持狀態(tài)"); this.state = state; } } interface State{ void show(Context context); } class Move implements State{ public void show(Context context) { context.setState(this); System.out.println("物體處于運(yùn)動(dòng)狀態(tài)"); } } class Stop implements State{ public void show(Context context) { context.setState(this); System.out.println("物體處于靜止?fàn)顟B(tài)"); } }
狀態(tài)模式是用于對(duì)象狀態(tài)比較多的情況,比如完成一件事的時(shí)候有未完成、已完成、進(jìn)行中、擱置等狀態(tài),這時(shí)候就可以考慮是用狀態(tài)模式。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java中的有限狀態(tài)機(jī)(設(shè)計(jì)模式——狀態(tài)模式)
- Java設(shè)計(jì)模式之狀態(tài)模式詳解
- 淺析Java語言中狀態(tài)模式的優(yōu)點(diǎn)
- Java設(shè)計(jì)模式之狀態(tài)模式
- 深入理解Java設(shè)計(jì)模式之狀態(tài)模式
- Java設(shè)計(jì)模式之java狀態(tài)模式詳解
- 詳解JAVA 設(shè)計(jì)模式之狀態(tài)模式
- Java基于狀態(tài)模式實(shí)現(xiàn)的文檔編輯模式切換功能實(shí)例
- Java實(shí)現(xiàn)狀態(tài)模式的示例代碼
相關(guān)文章
SpringSecurityOAuth2 如何自定義token信息
這篇文章主要介紹了SpringSecurityOAuth2 自定義token信息的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06MyBatisPlus中使用or()和and()遇到的問題及細(xì)節(jié)處理
這篇文章主要介紹了MyBatisPlus中使用or()和and()遇到的問題,本文通過多種寫法實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08springboot多模塊項(xiàng)目mvn打包遇到存在依賴但卻無法發(fā)現(xiàn)符號(hào)問題
在SpringBoot多模塊項(xiàng)目中,如果遇到依賴存在但無法發(fā)現(xiàn)符號(hào)的問題,常見原因可能是pom.xml配置問題,例如,如果某個(gè)模塊僅作為依賴而不是啟動(dòng)工程,不應(yīng)在其pom中配置spring-boot-maven-plugin插件,因?yàn)檫@將影響jar包的生成方式2024-09-09SpringBoot集成Druid實(shí)現(xiàn)監(jiān)控功能的示例代碼
這篇文章主要介紹了SpringBoot集成Druid實(shí)現(xiàn)監(jiān)控功能,Druid是阿里巴巴開發(fā)的號(hào)稱為監(jiān)控而生的數(shù)據(jù)庫連接池,可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況,天生就是針對(duì)監(jiān)控而生的DB連接池,文中通過代碼示例講解非常詳細(xì),需要的朋友可以參考下2024-02-02使用Spring自定義實(shí)現(xiàn)IOC和依賴注入(注解方式)
這篇文章主要介紹了使用Spring自定義實(shí)現(xiàn)IOC和依賴注入(注解方式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08詳解IntelliJ IDEA 中如何配置多個(gè)jdk版本即(1.7和1.8兩個(gè)jdk都可用)
這篇文章主要介紹了詳解IntelliJ IDEA 中如何配置多個(gè)jdk版本即(1.7和1.8兩個(gè)jdk都可用),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-11-11Java獲取服務(wù)器IP及端口的方法實(shí)例分析
這篇文章主要介紹了Java獲取服務(wù)器IP及端口的方法,結(jié)合實(shí)例形式分析了java針對(duì)客戶端及服務(wù)器端各種常見的信息操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-12-12Spring實(shí)戰(zhàn)之Bean的作用域request用法分析
這篇文章主要介紹了Spring實(shí)戰(zhàn)之Bean的作用域request用法,結(jié)合實(shí)例形式分析了spring中Bean的request作用域相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-11-11