1. 程式人生 > 實用技巧 >無廢話設計模式(14)結構型模式--狀態模式

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

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、當一個操作物件含大量多分支條件語句,且這些分支依賴該物件的狀態時;