- State 抽象狀態角色
- 依賴環境角色 context
- handler,handler2 ... hanlerN 多個狀態的業務邏輯
- ConcreteState 具體狀態角色,一個類對應一種狀態
- 針對每個狀態下,自己的業務邏輯handler
- 其他的handler方法,先context.setCurrentState切換狀態,再調用context.handlerN方法
- Context 環境角色
- 多個 new ConcreteState 屬性
- currentState 當前狀態屬性
- setCurrentState(currentState) : 更新currentState屬性,更新currentState的context屬性
- 對應抽象狀態的多個handler方法,委托給currentState對應的handler執行
context = new Context();
context.setCurrentState(new ConcreteState1()); // 初始化狀態1
context.handle1(); // 直接調用ConcreteState1.handler1()
context.handle2(); // 切換到ConcreteState2,調用handler2()。隱藏了狀態的變化
總結
優點
- 避免了過多的條件判斷,不過相應地狀態子類數量會增加
- 狀態修改只需要修改對應的狀態實現子類,增加狀態只要增加子類。
- 封裝了狀態的變化過程