状态模式(State Pattern)
状态模式是一种行为型设计模式,用于实现对象在不同状态下的行为变化。它通过将每个状态封装成一个类,
并在主体对象中维护一个状态对象,来实现对象状态的切换和相应行为的执行。
提供demo版代码更容易理解
java
/**
* @author zhou
* 状态接口
*/
interface State {
void handle();
}
/**
* @author zhou
* 具体状态类A
*/
class ConcreteStateA implements State {
public void handle() {
System.out.println("执行状态A的行为");
}
}
/**
* @author zhou
* 具体状态类B
*/
class ConcreteStateB implements State {
public void handle() {
System.out.println("执行状态B的行为");
}
}
/**
* @author zhou
* 上下文类
*/
class Context {
private State currentState;
public Context() {
// 初始状态设置为A
currentState = new ConcreteStateA();
}
public void setState(State state) {
currentState = state;
}
public void request() {
currentState.handle();
}
}
/**
* @author zhou
* 客户端使用
*/
public class Main {
public static void main(String[] args) {
Context context = new Context();
// 初始状态下执行状态A的行为
context.request();
// 将状态切换为B
context.setState(new ConcreteStateB());
// 执行状态B的行为
context.request();
}
}
我们定义了一个状态接口 State,具体状态类 ConcreteStateA 和 ConcreteStateB 实现了该接口。
上下文类 Context 中维护了一个当前状态对象并提供了切换状态和执行行为的方法。
在 Context 类中,我们首先将初始状态设置为 ConcreteStateA。
setState 方法用于切换状态,request 方法会调用当前状态对象的 handle 方法来执行状态对应的行为。
在 Main 类的 main 方法中,我们创建了一个 Context 对象,并展示了初始状态下执行状态A的行为。
然后通过 setState 方法将状态切换为B,并再次调用 request 方法来执行状态B的行为。
该示例展示了如何使用状态模式来实现对象在不同状态下的行为变化,避免过多的条件判断,并将状态的处理逻辑封装在各个状态类中,提高了代码的可维护性和扩展性。