状态模式(State Pattern)是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为。
状态模式的核心思想是将对象的状态封装成独立的类,并在对象内部维护一个对当前状态对象的引用。当对象的状态发生变化时,通过切换当前的状态对象来实现不同的行为。
以下是一个简单的状态模式示例,假设我们有一个电灯类,它有开和关两种状态:
interface LightState {
void handle(Light light);
}
class OnState implements LightState {
@Override
public void handle(Light light) {
System.out.println("Light is already on.");
light.setState(new OffState());
}
}
class OffState implements LightState {
@Override
public void handle(Light light) {
System.out.println("Turning the light on.");
light.setState(new OnState());
}
}
class Light {
private LightState state;
public Light() {
state = new OffState();
}
public void setState(LightState state) {
this.state = state;
}
public void pressButton() {
state.handle(this);
}
}
public class StatePatternExample {
public static void main(String[] args) {
Light light = new Light();
light.pressButton();
light.pressButton();
light.pressButton();
}
}
在上述示例中, Light 类的行为根据其当前的状态( OnState 或 OffState )而改变。通过状态模式,我们将状态相关的行为封装在不同的状态类中,使得对象的行为更加清晰和易于维护。
状态模式的优点包括:
1. 解耦了状态和行为,使得状态的转换更加清晰和直观。
2. 方便添加新的状态和对应的行为,具有良好的扩展性。
3. 使代码更具可读性和可维护性。
缺点可能包括:
1. 可能会增加系统中类的数量。
2. 状态模式的结构相对复杂,对于简单的状态管理可能会导致过度设计。