状态模式

状态模式

状态(State)模式:对有状态的对象,把复杂的"判断逻辑"提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。

案例

模拟不同的上课状态转换:

java 复制代码
public interface ClassState {
    void study();
    ClassState next();
}
java 复制代码
public class MathClassState implements ClassState{
    @Override
    public void study() {
        System.out.println("数学课想睡觉");
    }

    @Override
    public ClassState next() {
        return new PEClassState();
    }
}
java 复制代码
public class PEClassState implements ClassState{
    @Override
    public void study() {
        System.out.println("体育课打起精神");
    }

    @Override
    public ClassState next() {
        return new AfterClassState();
    }
}
java 复制代码
public class AfterClassState implements ClassState{
    @Override
    public void study() {
        System.out.println("放学了很开心");
    }

    @Override
    public ClassState next() {
        return new MathClassState();
    }
}
java 复制代码
public class Student {
    private ClassState state;
    public Student(ClassState state){
        this.state = state;
    }

    public void study(){
        state.study();
    }

    public void nextState(){
        this.state = state.next();
    }
}

测试:

java 复制代码
public class Main {
    public static void main(String[] args) {
        Student student = new Student(new MathClassState());
        student.study();

        student.nextState();
        student.study();

        student.nextState();
        student.study();
    }
}
相关推荐
aaPIXa62223 分钟前
C++ 用 13 条规则让模型写出安全现代 C++
java·c++·安全
逆向编程1 小时前
Socket异常连接自动清理方案
开发语言
2601_949817722 小时前
C++指针与引用深度精讲:底层原理、差异对比与高阶实战陷阱
java·jvm·c++
va学弟2 小时前
Java 网络通信编程(10):Channel 和 Selector
java·开发语言
爱吃提升2 小时前
MATLAB impulse函数脉冲响应完整实操教程
开发语言·matlab
小饕2 小时前
从 1080 Ti 到树莓派 4:Qwen2.5-0.5B Function Calling 端侧部署七步实战
开发语言·人工智能
小张小张爱学习2 小时前
Apache Dubbo 3 + Spring Boot 3 多模块 Maven 项目,演示基于 Zookeeper 注册中心的 RPC 调用
java·dubbo
糯米导航3 小时前
Rust + ONNX Runtime 构建生产级 AI 推理服务:从零到压测
开发语言·人工智能·rust
阿pin3 小时前
Java随笔-ConcurrentHashMap
java·开发语言·哈希算法
秋田君3 小时前
QT_QT布局详解
开发语言·数据库·qt