• java实现状态模式


    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为。在状态模式中,对象将其行为委托给表示不同状态的状态对象,这些状态对象负责管理其行为。以下是在 Java 中实现状态模式的一般步骤:

    1. 创建一个状态接口(State):该接口定义了具体状态类必须实现的方法,通常包括所有可能的状态下的操作。

    2. 创建具体状态类(ConcreteState):这些类实现状态接口,每个类表示系统的一种具体状态,并定义了在该状态下的行为。

    3. 创建一个上下文类(Context):上下文类包含一个对当前状态的引用,它委托状态相关的操作给当前状态对象。

    现在,让我们通过一个简单的示例来实现状态模式,假设我们有一个简单的电梯系统:

    // 步骤 1: 创建状态接口
    interface State {
        void open();
        void close();
        void goUp();
        void goDown();
    }
    
    // 步骤 2: 创建具体状态类
    class OpenState implements State {
        @Override
        public void open() {
            System.out.println("电梯门已经打开...");
        }
    
        @Override
        public void close() {
            System.out.println("电梯门关闭。");
        }
    
        @Override
        public void goUp() {
            System.out.println("电梯上升中...");
        }
    
        @Override
        public void goDown() {
            System.out.println("电梯无法下降,门还没关闭!");
        }
    }
    
    class ClosedState implements State {
        @Override
        public void open() {
            System.out.println("电梯门正在打开...");
        }
    
        @Override
        public void close() {
            System.out.println("电梯门已经关闭。");
        }
    
        @Override
        public void goUp() {
            System.out.println("电梯上升中...");
        }
    
        @Override
        public void goDown() {
            System.out.println("电梯下降中...");
        }
    }
    
    // 步骤 3: 创建上下文类
    class Elevator {
        private State state;
    
        public Elevator() {
            state = new ClosedState();
        }
    
        public void setState(State state) {
            this.state = state;
        }
    
        public void open() {
            state.open();
        }
    
        public void close() {
            state.close();
        }
    
        public void goUp() {
            state.goUp();
        }
    
        public void goDown() {
            state.goDown();
        }
    }
    
    // 示例
    public class Main {
        public static void main(String[] args) {
            Elevator elevator = new Elevator();
    
            elevator.open();
            elevator.goUp();
    
            elevator.setState(new OpenState());
            elevator.goDown();
    
            elevator.close();
            elevator.goDown();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97

    在这个示例中,我们创建了 State 接口,然后实现了两个具体状态类 OpenStateClosedState,它们分别表示电梯的开门和关门状态。Elevator 类代表电梯的上下文,它根据当前状态委托操作。

    状态模式允许您在不同的状态下执行不同的操作,使代码更具可扩展性和可维护性,特别适用于具有多个状态的复杂对象。

  • 相关阅读:
    Decoder与Encoder重要组件
    支持在代码编辑器中调试接口,IDEA插件推荐
    Python深度学习实践代码实现
    解读Redis常见命令
    量子计算:数据安全难题
    ssm项目运行后显示到登陆页面,账户密码登陆显示错误是什么问题,
    vant+vue在静态页面实现车牌号软键盘
    React报错之Parameter ‘props‘ implicitly has an ‘any‘ type
    I2C通信协议
    Keil5中如何做到 0 Error(s), 0 Warning(s).
  • 原文地址:https://blog.csdn.net/sunyuhua_keyboard/article/details/132684815