最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解JAVA 設(shè)計模式之狀態(tài)模式

 更新時間:2020年06月29日 16:41:35   作者:菜鳥教程  
這篇文章主要介紹了JAVA 狀態(tài)模式的的相關(guān)資料,文中講解的非常細致,幫助大家更好的學(xué)習(xí)理解JAVA 設(shè)計模式,感興趣的朋友可以了解下

在狀態(tài)模式(State Pattern)中,類的行為是基于它的狀態(tài)改變的。這種類型的設(shè)計模式屬于行為型模式。

在狀態(tài)模式中,我們創(chuàng)建表示各種狀態(tài)的對象和一個行為隨著狀態(tài)對象改變而改變的 context 對象。

介紹

意圖:

允許對象在內(nèi)部狀態(tài)發(fā)生改變時改變它的行為,對象看起來好像修改了它的類。

主要解決:

對象的行為依賴于它的狀態(tài)(屬性),并且可以根據(jù)它的狀態(tài)改變而改變它的相關(guān)行為。

何時使用:

代碼中包含大量與對象狀態(tài)有關(guān)的條件語句。

如何解決:

將各種具體的狀態(tài)類抽象出來。

關(guān)鍵代碼:

通常命令模式的接口中只有一個方法。而狀態(tài)模式的接口中有一個或者多個方法。而且,狀態(tài)模式的實現(xiàn)類的方法,一般返回值,或者是改變實例變量的值。也就是說,狀態(tài)模式一般和對象的狀態(tài)有關(guān)。實現(xiàn)類的方法有不同的功能,覆蓋接口中的方法。狀態(tài)模式和命令模式一樣,也可以用于消除 if...else 等條件選擇語句。

應(yīng)用實例:

1、打籃球的時候運動員可以有正常狀態(tài)、不正常狀態(tài)和超常狀態(tài)。

2、曾侯乙編鐘中,'鐘是抽象接口','鐘A'等是具體狀態(tài),'曾侯乙編鐘'是具體環(huán)境(Context)。

優(yōu)點:

1、封裝了轉(zhuǎn)換規(guī)則。

2、枚舉可能的狀態(tài),在枚舉狀態(tài)之前需要確定狀態(tài)種類。

3、將所有與某個狀態(tài)有關(guān)的行為放到一個類中,并且可以方便地增加新的狀態(tài),只需要改變對象狀態(tài)即可改變對象的行為。

4、允許狀態(tài)轉(zhuǎn)換邏輯與狀態(tài)對象合成一體,而不是某一個巨大的條件語句塊。

5、可以讓多個環(huán)境對象共享一個狀態(tài)對象,從而減少系統(tǒng)中對象的個數(shù)。

缺點:

1、狀態(tài)模式的使用必然會增加系統(tǒng)類和對象的個數(shù)。

2、狀態(tài)模式的結(jié)構(gòu)與實現(xiàn)都較為復(fù)雜,如果使用不當(dāng)將導(dǎo)致程序結(jié)構(gòu)和代碼的混亂。

3、狀態(tài)模式對"開閉原則"的支持并不太好,對于可以切換狀態(tài)的狀態(tài)模式,增加新的狀態(tài)類需要修改那些負責(zé)狀態(tài)轉(zhuǎn)換的源代碼,否則無法切換到新增狀態(tài),而且修改某個狀態(tài)類的行為也需修改對應(yīng)類的源代碼。

使用場景:

1、行為隨狀態(tài)改變而改變的場景。

2、條件、分支語句的代替者。

注意事項:

在行為受狀態(tài)約束的時候使用狀態(tài)模式,而且狀態(tài)不超過 5 個。

實現(xiàn)

我們將創(chuàng)建一個 State 接口和實現(xiàn)了 State 接口的實體狀態(tài)類。Context 是一個帶有某個狀態(tài)的類。

StatePatternDemo,我們的演示類使用 Context 和狀態(tài)對象來演示 Context 在狀態(tài)改變時的行為變化。

步驟 1

創(chuàng)建一個接口。

public interface State {
  public void doAction(Context context);
}

步驟 2

創(chuàng)建實現(xiàn)接口的實體類。

public class StartState implements State {
 
  public void doAction(Context context) {
   System.out.println("Player is in start state");
   context.setState(this); 
  }
 
  public String toString(){
   return "Start State";
  }
}
public class StopState implements State {
 
  public void doAction(Context context) {
   System.out.println("Player is in stop state");
   context.setState(this); 
  }
 
  public String toString(){
   return "Stop State";
  }
}

步驟 3

創(chuàng)建 Context 類。

public class Context {
  private State state;
 
  public Context(){
   state = null;
  }
 
  public void setState(State state){
   this.state = state;   
  }
 
  public State getState(){
   return state;
  }
}

步驟 4

使用 Context 來查看當(dāng)狀態(tài) State 改變時的行為變化。

public class StatePatternDemo {
  public static void main(String[] args) {
   Context context = new Context();
 
   StartState startState = new StartState();
   startState.doAction(context);
 
   System.out.println(context.getState().toString());
 
   StopState stopState = new StopState();
   stopState.doAction(context);
 
   System.out.println(context.getState().toString());
  }
}

步驟 5

執(zhí)行程序,輸出結(jié)果:

Player is in start state
Start State
Player is in stop state
Stop State

以上就是詳解JAVA 設(shè)計模式之狀態(tài)模式的詳細內(nèi)容,更多關(guān)于JAVA 狀態(tài)模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 反射機制原理與用法詳解

    Java 反射機制原理與用法詳解

    這篇文章主要介紹了Java 反射機制原理與用法,結(jié)合實例形式詳細分析了Java反射機制的相關(guān)概念、原理、基本使用方法及操作注意事項,需要的朋友可以參考下
    2019-11-11
  • Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題

    Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題

    這篇文章主要介紹了Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringCloud Config配置加密解密用法解析

    SpringCloud Config配置加密解密用法解析

    這篇文章主要介紹了SpringCloud Config配置加密解密用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • java實現(xiàn)基于SMTP發(fā)送郵件的方法

    java實現(xiàn)基于SMTP發(fā)送郵件的方法

    這篇文章主要介紹了java實現(xiàn)基于SMTP發(fā)送郵件的方法,實例分析了java基于SMTP服務(wù)發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)之KMP算法詳解以及代碼實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之KMP算法詳解以及代碼實現(xiàn)

    KMP算法是一種改進的字符串匹配算法,核心是利用之前的匹配失敗時留下的信息,選擇最長匹配長度直接滑動,從而減少匹配次數(shù)。本文主要介紹了KMP算法的原理與實現(xiàn),需要的可以參考一下
    2022-12-12
  • Java雜談之重復(fù)代碼是什么

    Java雜談之重復(fù)代碼是什么

    剛開始工作時,總有人開玩笑說,編程實際上就是 CV,調(diào)侃很多程序員寫程序依靠的是復(fù)制粘貼。至今,很多初級甚至高級程序員寫代碼依舊是CV,就是把其他項目里的一段代碼復(fù)制過來,稍加改動,然后,跑一下沒有大問題就完事。這就是在給其他人挖坑
    2021-09-09
  • Spring配置文件的拆分和整合過程分析

    Spring配置文件的拆分和整合過程分析

    在實際應(yīng)用里,隨著應(yīng)用規(guī)模的增加,系統(tǒng)中 Bean 數(shù)量也大量增加,導(dǎo)致配置文件非常龐大。為了避免這種情況的產(chǎn)生,提高配置文件的可讀性與可維護性,可以將Spring 配置文件分解成多個配置文件,感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • 關(guān)于Maven中pom.xml文件配置詳解

    關(guān)于Maven中pom.xml文件配置詳解

    pom.xml是Maven項目的核心配置文件,它描述了項目的結(jié)構(gòu)、依賴關(guān)系、構(gòu)建配置等信息,通過合理配置pom.xml,可以提高項目的可維護性和構(gòu)建效率
    2025-01-01
  • SpringBoot2.7?WebSecurityConfigurerAdapter類過期配置

    SpringBoot2.7?WebSecurityConfigurerAdapter類過期配置

    這篇文章主要為大家介紹了SpringBoot2.7中WebSecurityConfigurerAdapter類過期應(yīng)該如何配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • IDEA之項目run按鈕為灰色,無法運行問題

    IDEA之項目run按鈕為灰色,無法運行問題

    這篇文章主要介紹了IDEA之項目run按鈕為灰色,無法運行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論

莎车县| 社旗县| 兴海县| 桐梓县| 襄垣县| 天镇县| 五大连池市| 都兰县| 盖州市| 云阳县| 天柱县| 额敏县| 思茅市| 盐边县| 栖霞市| 铁岭县| 定州市| 宁海县| 佛教| 德江县| 确山县| 中山市| 尼玛县| 宣武区| 北宁市| 康马县| 安福县| 靖远县| 汾西县| 罗定市| 大方县| 桦南县| 越西县| 芮城县| 拜城县| 洪江市| 元朗区| 湘潭市| 仙居县| 仪陇县| 香港 |