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