从原理到实践:面向对象设计中的经典模式-状态模式

69 阅读1分钟

Java状态模式是一种行为型设计模式,其本质是允许对象在内部状态改变时改变其行为。它将对象的状态封装成一个独立的类,使得状态可以独立于对象进行变化,从而使得对象的行为也可以随之发生变化。

以下是一个简单的Java状态模式的示例:

// 状态接口
public interface State {
    public void doAction(Context context);
}

// 具体状态类1
public class StateA implements State {
    @Override
    public void doAction(Context context) {
        // 执行状态A相关的操作
        context.setState(new StateB());  // 切换到下一个状态
    }
}

// 具体状态类2
public class StateB implements State {
    @Override
    public void doAction(Context context) {
        // 执行状态B相关的操作
        context.setState(new StateC());  // 切换到下一个状态
    }
}

// 具体状态类3
public class StateC implements State {
    @Override
    public void doAction(Context context) {
        // 执行状态C相关的操作
        context.setState(this);  // 保持当前状态不变
    }
}

// 上下文类
public class Context {
    private State state;

    public Context() {
        this.state = new StateA();  // 初始状态为A
    }

    public void setState(State state) {
        this.state = state;
    }

    public void doAction() {
        this.state.doAction(this);
    }
}

// 测试代码
public class StateDemo {
    public static void main(String[] args) {
        Context context = new Context();
        context.doAction();  // 状态从A变为B
        context.doAction();  // 状态从B变为C
        context.doAction();  // 状态保持不变,仍为C
    }
}

在这个示例中,状态接口State定义了一个doAction()方法,而具体的状态类则实现了这个方法来执行自己相关的操作,并根据需要切换到下一个状态。上下文类Context中维护了当前状态,并提供了一个setState()方法来改变状态,以及一个doAction()方法来执行当前状态的操作。测试代码展示了如何使用状态模式来管理对象的状态和行为。