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

淺析Java語(yǔ)言中狀態(tài)模式的優(yōu)點(diǎn)

 更新時(shí)間:2023年02月16日 15:43:12   作者:非凡的小笨魚(yú)  
狀態(tài)模式允許對(duì)象在內(nèi)部狀態(tài)改變時(shí)改變它的行為,對(duì)象看起來(lái)好像修改了它的類。這個(gè)模式將狀態(tài)封裝成獨(dú)立的類,并將動(dòng)作委托到 代表當(dāng)前狀態(tài)的對(duì)象,我們知道行為會(huì)隨著內(nèi)部狀態(tài)而改變

一.介紹

狀態(tài)模式(State Pattern)屬于行為型模式。當(dāng)控制一個(gè)對(duì)象狀態(tài)轉(zhuǎn)換的條件表達(dá)式過(guò)于復(fù)雜時(shí),把相關(guān)判斷邏輯提取出來(lái),用各個(gè)不同的狀態(tài)類進(jìn)行表示,系統(tǒng)處于哪種狀態(tài),直接使用相應(yīng)的狀態(tài)類對(duì)象進(jìn)行處理,從而消除if/else、switch/case語(yǔ)句

二.UML類圖

定義了多個(gè)狀態(tài),每個(gè)狀態(tài)類僅實(shí)現(xiàn)自己的邏輯,由環(huán)境類負(fù)責(zé)切換狀態(tài)

三.示意代碼

業(yè)務(wù)代碼

//環(huán)境類
public class Car {
    private CarState carState;
    public Car(CarState carState) {
        this.carState = carState;
    }
    public void setCarState(CarState carState) {
        this.carState = carState;
    }
    public void openDoor(){
        carState.openDoor();
    }
    public void closeDoor(){
        carState.closeDoor();
    }
    public void runCar(){
        carState.runCar();
    }
}
//抽象狀態(tài)類
abstract class CarState{
    public abstract void openDoor();
    public abstract void closeDoor();
    public abstract void runCar();
}
//具體狀態(tài)類
class OpenState extends CarState{
    @Override
    public void openDoor() {
        System.out.println("can not open the door");
    }
    @Override
    public void closeDoor() {
        System.out.println("close the door success");
    }
    @Override
    public void runCar() {
        System.out.println("can not run the car");
    }
}
//具體狀態(tài)類
class CloseState extends CarState{
    @Override
    public void openDoor() {
        System.out.println("open the door success");
    }
    @Override
    public void closeDoor() {
        System.out.println("can not close the door");
    }
    @Override
    public void runCar() {
        System.out.println("run the car success");
    }
}

客戶端

public class Client {
    public static void main(String[] args) {
        CarState state = new CloseState();
        Car car = new Car(state);
        car.openDoor();
        car.setCarState(new OpenState());
        car.runCar();
    }
}

四.使用場(chǎng)景

  • 行為隨狀態(tài)改變而改變
  • 消除復(fù)雜的if/else
  • 狀態(tài)類大概率會(huì)新增
  • 狀態(tài)類中的方法大概率不會(huì)新增

五.狀態(tài)模式與策略模式對(duì)比

狀態(tài)模式與策略模式的UML類圖幾乎相同,因此比較一下兩者的差異

狀態(tài)模式狀態(tài)之間可以存在互相依賴的關(guān)系狀態(tài)之間互相轉(zhuǎn)換,可以反復(fù) 策略模式多種算法行為選擇一個(gè)就能滿足算法之間彼此獨(dú)立

六.優(yōu)點(diǎn)

減少多重條件判斷(使用狀態(tài)模式可以避免多重條件判斷)符合開(kāi)閉原則(結(jié)合工廠模式,生成狀態(tài)的具體子類對(duì)象)狀態(tài)之間可以自由轉(zhuǎn)換符合單一職責(zé)原則(將不同狀態(tài)的行為分隔開(kāi))

到此這篇關(guān)于淺析Java語(yǔ)言中狀態(tài)模式的優(yōu)點(diǎn)的文章就介紹到這了,更多相關(guān)Java狀態(tài)模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot Actuator潛在的OOM問(wèn)題的解決

    SpringBoot Actuator潛在的OOM問(wèn)題的解決

    本文主要介紹了SpringBoot Actuator潛在的OOM問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java中String性能優(yōu)化

    Java中String性能優(yōu)化

    本文給大家分享的是如何在java中對(duì)String進(jìn)行性能優(yōu)化,使用String的時(shí)候需要有哪些注意事項(xiàng)呢,這就是今天我們要給大家總結(jié)分析的,有需要的小伙伴可以參考下。
    2015-03-03
  • Java中自定義LRU緩存詳解

    Java中自定義LRU緩存詳解

    這篇文章主要介紹了Java中自定義LRU緩存詳解,基于LRU算法的緩存系統(tǒng),可以在達(dá)到緩存容量上限時(shí),清理最近最少使用的數(shù)據(jù),為新的數(shù)據(jù)的插入騰出空間,需要的朋友可以參考下
    2023-09-09
  • Java/Android 獲取網(wǎng)絡(luò)重定向文件的真實(shí)URL的示例代碼

    Java/Android 獲取網(wǎng)絡(luò)重定向文件的真實(shí)URL的示例代碼

    本篇文章主要介紹了Java/Android 獲取網(wǎng)絡(luò)重定向文件的真實(shí)URL的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JVM角度調(diào)試優(yōu)化MyEclipse

    JVM角度調(diào)試優(yōu)化MyEclipse

    這篇文章主要介紹了從JVM角度對(duì)MyEclipse進(jìn)行調(diào)試優(yōu)化,為大家分析調(diào)試優(yōu)化MyEclipse的步驟,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 一篇文章搞定數(shù)據(jù)庫(kù)連接池

    一篇文章搞定數(shù)據(jù)庫(kù)連接池

    數(shù)據(jù)庫(kù)連接池在編寫(xiě)應(yīng)用服務(wù)是經(jīng)常需要用到的模塊,太過(guò)頻繁的連接數(shù)據(jù)庫(kù)對(duì)服務(wù)性能來(lái)講是一個(gè)瓶頸,使用緩沖池技術(shù)可以來(lái)消除這個(gè)瓶頸,本文就來(lái)介紹Java常見(jiàn)的幾種,感興趣的可以了解一下
    2021-07-07
  • SpringCloud-Config分布式配置代碼示例

    SpringCloud-Config分布式配置代碼示例

    這篇文章主要介紹了SpringCloud-Config分布式配置代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java基本數(shù)據(jù)類型族譜與易錯(cuò)點(diǎn)梳理解析

    Java基本數(shù)據(jù)類型族譜與易錯(cuò)點(diǎn)梳理解析

    Java有八大基本類型,很多同學(xué)只對(duì)經(jīng)常使用的int類型比較了解。有的同學(xué)是剛從C語(yǔ)言轉(zhuǎn)入Java學(xué)習(xí),誤以為兩者的基本數(shù)據(jù)類型完全相同,這也是大錯(cuò)特錯(cuò)的。今天這本Java基本數(shù)據(jù)類型全解析大字典,可以幫助你直接通過(guò)目錄找到你想要了解某一種基本數(shù)據(jù)類型
    2022-01-01
  • SpringBoot使用AOP記錄接口操作日志詳解

    SpringBoot使用AOP記錄接口操作日志詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用AOP記錄接口操作日志,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • SpringBoot+SpringSecurity實(shí)現(xiàn)認(rèn)證的流程詳解

    SpringBoot+SpringSecurity實(shí)現(xiàn)認(rèn)證的流程詳解

    這篇文章主要介紹了SpringBoot+SpringSecurity實(shí)現(xiàn)認(rèn)證的流程,文中通過(guò)代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

巴中市| 靖远县| 卢龙县| 兰西县| 赤峰市| 通许县| 邯郸县| 巴彦县| 垫江县| 南通市| 增城市| 武威市| 铜川市| 黑水县| 雷山县| 中阳县| 成安县| 平利县| 大埔区| 西城区| 阿巴嘎旗| 伊通| 正镶白旗| 建始县| 中阳县| 庆阳市| 北京市| 奇台县| 承德市| 康马县| 剑川县| 临桂县| 资兴市| 石狮市| 西藏| 平塘县| 福州市| 衡阳市| 宜黄县| 洪泽县| 新密市|