妙博客

主机评测 香港服务器 洛杉矶VPS测评

设计模式-JAVA-状态模式(State)

状态模式(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();
    }
}


输出结果为:

电梯门已打开
电梯门已关闭
电梯开始运行
电梯已停止
电梯门已打开
电梯门已关闭


可以看到,在不同的状态下,电梯的行为是不同的。状态模式可以帮助我们更好地管理对象的状态,使得对象的行为更加灵活和可扩展。



JAVA7大原则和23种设计模式汇总,点我查看

Copyright Your 142132.com Rights Reserved. 赣ICP备17010829号-2