無廢話設計模式(14)結構型模式--狀態模式

大叔楊發表於2020-08-03

0-前言

  狀態模式定義:當一個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類;

1-實現

1-1、簡單UML圖

 

 

1-2、程式碼實現

//1、狀態抽象父類
abstract  class State
{
    public String StateName;
    public abstract void Handle(Contex contex);
}

//2-1、具體狀態A
class StateStop extends  State
{
    public StateStop()
    {
        StateName = "停止狀態";  //當前狀態
    }

    @Override
    public void Handle(Contex contex)
    {
        contex.setState(new StateStart() ); //設定下一個狀態
    }
}

//2-2、具體狀態B
class StateStart extends  State
{
    public StateStart()
    {
        StateName = "開動狀態"; //當前撞他
    }

    @Override
    public void Handle(Contex contex)
    {
        contex.setState(new StateStop()); //設定下一個狀態
    }
}

//3、上下文類
class  Contex
{
    private  State state;
    public  Contex( State _state)
    {
        this.state = _state;
    }

    //1、設定狀態
    public  void setState(State st)
    {
        System.out.println("************當前狀態為:"+state.StateName);
        this.state = st;
        System.out.println("狀態變更為:"+state.StateName);
    }

    //2、執行方法
    public void Request()
    {
        state.Handle(this);
    }

 

客戶端:

        Contex ct = new Contex(new StateStart());
        ct.Request();
        ct.Request();
        ct.Request();

 

執行結果:

 

 

2-應用場景簡單總結

1、當物件的行為取決於它的狀態,且必須在執行時根據狀態來改變自己的行為時;

2、當一個操作物件含大量多分支條件語句,且這些分支依賴該物件的狀態時;

相關文章