定义:
对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。
特点:
状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。(优点)
- 减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。(优点)
- 有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。(优点)
-
通常适用场景:
当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式。
一个操作中含有庞大的分支结构,并且这些分支决定于对象的状态时。
demo代码:
处理类
public class ProcessHandle {private State state;//默认初始状态public ProcessHandle() {this.state = new AState();}//对请求做处理public void handle() {state.process(this);}public void setState(State state) {this.state = state;}public State getState() {return state;}}
状态类 ```java //状态类 public interface State { default void process(ProcessHandle processHandle) { } }
//A状态 public class AState implements State { @Override public void process(ProcessHandle processHandle) { System.out.println(“当前状态是 A.”); processHandle.setState(new BState()); } }
//B状态 public class BState implements State { @Override public void process(ProcessHandle processHandle) { System.out.println(“当前状态是 B.”); processHandle.setState(new AState()); } }
- 测试```javapublic static void main(String[] args) {ProcessHandle processHandle =ProcessHandle(); //处理HandleprocessHandle.handle(); //A状态processHandle.handle(); //B状态processHandle.handle(); //A状态processHandle.handle(); //B状态}
