状态模式

状态模式

状态(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();
    }
}
相关推荐
之歆15 小时前
Spring AI入门到实战到原理源码-MCP
java·人工智能·spring
LawrenceLan15 小时前
Flutter 零基础入门(十一):空安全(Null Safety)基础
开发语言·flutter·dart
yangminlei15 小时前
Spring Boot3集成LiteFlow!轻松实现业务流程编排
java·spring boot·后端
qq_3181215915 小时前
互联网大厂Java面试故事:从Spring Boot到微服务架构的技术挑战与解答
java·spring boot·redis·spring cloud·微服务·面试·内容社区
txinyu的博客16 小时前
解析业务层的key冲突问题
开发语言·c++·分布式
J_liaty16 小时前
Spring Boot整合Nacos:从入门到精通
java·spring boot·后端·nacos
码不停蹄Zzz16 小时前
C语言第1章
c语言·开发语言
行者9616 小时前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon16 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
daidaidaiyu16 小时前
Spring IOC 源码学习 一文学习完整的加载流程
java·spring