設(shè)計(jì)模式之狀態(tài)模式

狀態(tài)模式

狀態(tài)模式UML.png
interface TransformersState{
    void skill();//變形金剛不同狀態(tài)下有不同技能
}

汽車(chē)人接口

class CarTransformersState implements TransformersState{
    public void skill(){
        // 汽車(chē)狀態(tài),技能就是壓馬路吧
    }
}

變形金剛的汽車(chē)型狀態(tài)

class FightingTransformersState implements TransformersState{
    public void skill(){
        // 戰(zhàn)斗狀態(tài),技能反正不是壓馬路,就假設(shè)為射擊技能吧
    }
}

變形金剛的戰(zhàn)斗型狀態(tài)

class Context{
    TransformersState mTransformersState;
    public void setState(TransformersState mTransformersState){
    this.mTransformersState = mTransformersState;
    }
    public void skill(){
        mTransformersState.skill();
    }
}

用來(lái)管理切換狀態(tài)的類(lèi)

class Client{
    public static void main(String[] args){
        Context context = new Context();
        context.setState(new FightingTransformersState());//切到戰(zhàn)斗模式
        context.skill();//戰(zhàn)斗狀態(tài)下的技能
        context.setState(new CarTransformersState());//切到跑車(chē)模式
        context.skill();//跑車(chē)狀態(tài)下的技能
    }
}   

客戶(hù)端

狀態(tài)模式的場(chǎng)景一個(gè)對(duì)象的具體行為取決于這個(gè)對(duì)象內(nèi)部的狀態(tài),這些狀態(tài)可以被抽象出來(lái)單獨(dú)為類(lèi)。這種模式一定程度上會(huì)解決if-else多層判斷的問(wèn)題。狀態(tài)及某種狀態(tài)的具體實(shí)現(xiàn)可以被抽出去成類(lèi),層次會(huì)比較清晰,不過(guò)類(lèi)會(huì)增多

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在日常開(kāi)發(fā)過(guò)程中時(shí)常需要用到設(shè)計(jì)模式,但是設(shè)計(jì)模式有23種,如何將這些設(shè)計(jì)模式了然于胸并且能在實(shí)際開(kāi)發(fā)過(guò)程中應(yīng)用得...
    AntDream閱讀 1,630評(píng)論 2 3
  • 面向?qū)ο缶幊讨校?lèi)用來(lái)表示對(duì)象,一般情況下,我們需要考慮用類(lèi)來(lái)表示什么具體的東西。類(lèi)對(duì)應(yīng)的東西可能存在于真實(shí)世界中...
    六尺帳篷閱讀 8,656評(píng)論 0 11
  • 狀態(tài)模式 面向?qū)ο缶幊讨τ谠趯?duì)象交互時(shí)改變它們的狀態(tài)。在很多問(wèn)題中,有限狀態(tài)機(jī)(通常名為狀態(tài)機(jī))是一個(gè)非常方便的...
    英武閱讀 5,744評(píng)論 0 51
  • 場(chǎng)景引出 假設(shè)你有這樣一種需求:零售系統(tǒng)中的訂單通常有多種狀態(tài),包括了從支付、出庫(kù)、發(fā)貨、簽收等各種狀態(tài)。而系統(tǒng)則...
    SCQ000閱讀 682評(píng)論 0 50
  • 在開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到很多if-else的判斷,有的會(huì)有很多層,當(dāng)然也不是說(shuō)所有的涉及到if-else判斷的...
    westLakeChild閱讀 673評(píng)論 0 1

友情鏈接更多精彩內(nèi)容