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

3、状态模式(State)

意图

允许在对象内部状态改变时,改变它的运行状态

实现

public class Elevator {
    private ElevatorState openState;
    private ElevatorState closeState;
    private ElevatorState runState;
    private ElevatorState stopState;

    private ElevatorState elevatorState;

    public Elevator() {
        openState = new ElevatorOpenState(this);
        closeState = new ElevatorCloseState(this);
        runState = new ElevatorRunState(this);
        stopState = new ElevatorStopState(this);
        setElevatorState(stopState);
    }

    public void open() {
        elevatorState.open();
    }

    public void close() {
        elevatorState.close();
    }

    public void stop() {
        elevatorState.stop();
    }

    public void run() {
        elevatorState.run();
    }

    public void setElevatorState(ElevatorState elevatorState) {
        this.elevatorState = elevatorState;
    }

    public ElevatorState getCloseState() {
        return closeState;
    }

    public ElevatorState getOpenState() {
        return openState;
    }

    public ElevatorState getRunState() {
        return runState;
    }

    public ElevatorState getStopState() {
        return stopState;
    }
}

public class ElevatorCloseState implements ElevatorState {

    private Elevator elevator;

    public ElevatorCloseState(Elevator elevator) {
        this.elevator = elevator;
    }

    @Override
    public void open() {
        System.out.println("电梯门正在打开");
        elevator.setElevatorState(elevator.getOpenState());
    }

    @Override
    public void close() {
        System.out.println("电梯门已经关闭");
    }

    @Override
    public void run() {
        System.out.println("电梯即将运行");
        elevator.setElevatorState(elevator.getRunState());
    }

    @Override
    public void stop() {
        System.out.println("电梯已停止");
    }
}
public class ElevatorOpenState implements ElevatorState {

    private Elevator elevator;

    public ElevatorOpenState(Elevator elevator) {
        this.elevator = elevator;
    }

    @Override
    public void open() {
        System.out.println("电梯门已经打开");
    }

    @Override
    public void close() {
        System.out.println("电梯门正在关闭");
        elevator.setElevatorState(elevator.getCloseState());
    }

    @Override
    public void run() {
        System.out.println("电梯门未关闭无法运行");
    }

    @Override
    public void stop() {
        System.out.println("电梯已经停止");
    }
}
public class ElevatorRunState implements ElevatorState {

    private Elevator elevator;

    public ElevatorRunState(Elevator elevator) {
        this.elevator = elevator;
    }

    @Override
    public void stop() {
        System.out.println("电梯即将停止");
        elevator.setElevatorState(elevator.getStopState());
    }

    @Override
    public void open() {
        System.out.println("电梯运行,无法开门");
    }

    @Override
    public void close() {
        System.out.println("电梯门已关闭");
    }

    @Override
    public void run() {
        System.out.println("电梯正在运行");
    }
}
public class ElevatorStopState implements ElevatorState {

    private Elevator elevator;

    public ElevatorStopState(Elevator elevator) {
        this.elevator = elevator;
    }

    @Override
    public void open() {
        System.out.println("电梯门正在被打开");
        elevator.setElevatorState(elevator.getOpenState());
    }

    @Override
    public void close() {
        System.out.println("电梯门已经关闭");
    }

    @Override
    public void run() {
        System.out.println("电梯即将运行");
        elevator.setElevatorState(elevator.getRunState());
    }

    @Override
    public void stop() {
        System.out.println("电梯已停止");
    }
}
public interface ElevatorState {

    void open();

    void close();

    void run();

    void stop();
}
public class Client {

    public static void main(String[] args) {
        Elevator elevator = new Elevator();

        elevator.open();

        elevator.close();

        elevator.run();

        elevator.open();

        elevator.stop();

        elevator.open();
    }
}

运行结果

电梯门正在被打开
电梯门正在关闭
电梯即将运行
电梯运行,无法开门
电梯即将停止
电梯门正在被打开
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值