什么是状态模式
对象根据不同的情况做出不同的行为,即不同状态下触发不同的行为,类的行为是基于它的状态改变的。
状态一般是动态增删的,不是固定的,所以无法用if…else提前写死。
适用场景
- 动态的状态,非固定值
-
代码实现
状态模式包含以下主要角色。
环境类(Context)角色:也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。
- 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。
- 具体状态(Concrete State)角色:实现抽象状态所对应的行为,并且在需要的情况下进行状态切换。
```java
/**
- 抽象状态类 */ abstract class State { public abstract void handle(Context context); }
/**
- 具体状态A
*/
class StateA extends State {
@Override
public void handle(Context context) {
} }System.out.println("当前状态是A");
/**
- 具体状态B
*/
class StateB extends State {
@Override
public void handle(Context context) {
} }System.out.println("当前状态是B");
/**
环境类 */ class Context { private State state;
public Context() { }
//设置新状态 public void setState(State state) {
this.state = state;
}
//读取状态 public State getState() {
return this.state;
}
//对请求做处理 public void handle() {
state.handle(this);
} }
/**
状态模式测试类 */ public class StatePattern { public static void main(String[] args) {
//创建环境
Context context = new Context();
State a = new StateA();
context.setState(a);
context.handle();
State b = new StateB();
context.setState(b);
context.handle();
//输出:
//当前状态是A
//当前状态是B
} } ```