状态(State)模式根据对象所处状态的不同而改变对象的行为。
状态模式包含三部分:
- Context 提供客户需求的接口,持有ConcreteState对象以定义当前状态
- State 为不同状态的子类声明公共接口
- ConcreteState 每个子类实现一个与Context状态相对应的行为
State
abstract class State {
abstract void open(Context context);
abstract void close(Context context);
void changeState(Context context, State state) {
context.changeState(state);
}
}
ConcreteState
class OpenState extends State {
@Override
public void open(Context context) {
}
@Override
public void close(Context context) {
changeState(context, new CloseState());
}
}
class CloseState extends State {
@Override
public void open(Context context) {
changeState(context, new OpenState());
}
@Override
public void close(Context context) {
}
}
Context
class Context {
private State state;
public Context(State state) {
this.state = state;
}
void open() {
state.open(this);
}
void close() {
state.close(this);
}
void changeState(State state) {
this.state = state;
}
}