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

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

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

一.介紹

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

二.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();
    }
}

四.使用場景

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

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

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

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

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

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

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

相關(guān)文章

  • SpringBoot Actuator潛在的OOM問題的解決

    SpringBoot Actuator潛在的OOM問題的解決

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

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

    本文給大家分享的是如何在java中對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角度對MyEclipse進(jìn)行調(diào)試優(yōu)化,為大家分析調(diào)試優(yōu)化MyEclipse的步驟,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 一篇文章搞定數(shù)據(jù)庫連接池

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

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

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

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

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

    Java有八大基本類型,很多同學(xué)只對經(jīng)常使用的int類型比較了解。有的同學(xué)是剛從C語言轉(zhuǎn)入Java學(xué)習(xí),誤以為兩者的基本數(shù)據(jù)類型完全相同,這也是大錯(cuò)特錯(cuò)的。今天這本Java基本數(shù)據(jù)類型全解析大字典,可以幫助你直接通過目錄找到你想要了解某一種基本數(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)證的流程,文中通過代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05

最新評論

木里| 台南县| 广河县| 大丰市| 宁国市| 四会市| 义乌市| 饶河县| 高雄县| 保靖县| 额济纳旗| 玛曲县| 革吉县| 营山县| 龙泉市| 阿克陶县| 竹北市| 岳西县| 紫阳县| 蓝山县| 淳化县| 石家庄市| 四川省| 泽普县| 长治市| 巫溪县| 延川县| 吉木乃县| 大安市| 太湖县| 盐边县| 绥江县| 汾西县| 诸城市| 临清市| 区。| 东辽县| 通化县| 金乡县| 措美县| 鲜城|