状态模式(State)是一种行为型设计模式,它允许对象在其内部状态发生改变时改变其行为。在状态模式中,对象的行为取决于其内部状态,而不是取决于其类。
下面是一个简单的状态模式的示例,假设有一个电梯,它有四种状态:停止、运行、开门和关门。在不同的状态下,电梯的行为是不同的。
首先,我们需要定义一个状态接口,它包含了电梯在不同状态下的行为:
public interface ElevatorState { void openDoor(); void closeDoor(); void run(); void stop(); }
然后,我们需要实现这个接口,定义不同状态下的行为:
public class StopState implements ElevatorState { @Override public void openDoor() { System.out.println("电梯门已打开"); } @Override public void closeDoor() { System.out.println("电梯门已关闭"); } @Override public void run() { System.out.println("电梯开始运行"); } @Override public void stop() { System.out.println("电梯已停止"); } } public class RunState implements ElevatorState { @Override public void openDoor() { System.out.println("电梯正在运行,不能开门"); } @Override public void closeDoor() { System.out.println("电梯正在运行,不能关门"); } @Override public void run() { System.out.println("电梯正在运行"); } @Override public void stop() { System.out.println("电梯停止运行"); } } public class OpenState implements ElevatorState { @Override public void openDoor() { System.out.println("电梯门已打开"); } @Override public void closeDoor() { System.out.println("电梯门已关闭"); } @Override public void run() { System.out.println("电梯门未关闭,不能运行"); } @Override public void stop() { System.out.println("电梯门未关闭,不能停止"); } } public class CloseState implements ElevatorState { @Override public void openDoor() { System.out.println("电梯门已打开"); } @Override public void closeDoor() { System.out.println("电梯门已关闭"); } @Override public void run() { System.out.println("电梯开始运行"); } @Override public void stop() { System.out.println("电梯已停止"); } }
最后,我们需要定义一个电梯类,它包含了当前状态和状态转换的方法:
public class Elevator { private ElevatorState state; public Elevator() { state = new StopState(); } public void setState(ElevatorState state) { this.state = state; } public void openDoor() { state.openDoor(); } public void closeDoor() { state.closeDoor(); } public void run() { state.run(); } public void stop() { state.stop(); } }
现在,我们可以使用这个电梯类来模拟电梯的运行过程:
public class Main { public static void main(String[] args) { Elevator elevator = new Elevator(); elevator.openDoor(); elevator.closeDoor(); elevator.run(); elevator.stop(); elevator.openDoor(); elevator.closeDoor(); } }
输出结果为:
电梯门已打开 电梯门已关闭 电梯开始运行 电梯已停止 电梯门已打开 电梯门已关闭
可以看到,在不同的状态下,电梯的行为是不同的。状态模式可以帮助我们更好地管理对象的状态,使得对象的行为更加灵活和可扩展。