描述
状态模式(State Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,从而使其看起来像是改变了自己的类。状态模式的核心思想是将对象的行为与状态分离开来,将每个状态封装为一个类,并将请求委托给当前状态对象来处理。
实现
状态抽象
public interface State {
void handle();
}
状态实现
public class State1 implements State{
@Override
public void handle() {
System.out.println("handle state1");
}
}
public class State2 implements State {
@Override
public void handle() {
System.out.println("handle state2");
}
}
环境对象
public class Context {
private State state;
public Context(State state){
this.state = state;
}
void request(){
state.handle();
}
public void setState(State state) {
this.state = state;
}
}
客户端
public class Client {
public static void main(String[] args) {
Context context = new Context(new State1());
context.request();
context.setState(new State2());
context.request();
}
}
实现结果
使用场景
-
对象的行为随着内部状态的变化而变化:当对象的行为与内部状态有关时,可以使用状态模式来处理状态变化的行为。
-
对象有多个状态且每个状态需要特定的行为:当一个对象具有多种状态且每个状态都需要特定的行为时,可以使用状态模式来处理这种情况。
-
避免使用大量的条件语句:当需要在对象的状态发生变化时根据不同的状态执行不同的操作时,使用状态模式可以避免使用大量的条件语句。
-
状态转换较复杂:当对象状态的转换涉及到多个条件和动作时,可以使用状态模式来封装这些复杂的状态转换逻辑。
-
在状态之间共享数据:当多个状态需要共享数据时,可以使用状态模式来封装数据,并使得状态之间可以共享这些数据。