状态模式

状态模式

状态(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();
    }
}
相关推荐
pumpkin845147 分钟前
jacoco-maven-plugin使用
java·maven
java—大象9 分钟前
基于Java+Jsp+SpringMVC漫威手办商城系统设计和实现
java·数据库·spring boot·python·课程设计
JOJO___11 分钟前
Spring MVC 基本配置步骤 总结
java·spring·mvc
鱟鲥鳚13 分钟前
Maven的详细解读和配置
java·maven
程序猿进阶15 分钟前
定时任务上云改造方案
java·服务器·网络·数据库·性能优化·定时任务·上云
一休哥助手16 分钟前
Java/Spring项目中包名以“com”开头的原因分析
java·开发语言·spring
TravisBytes28 分钟前
虚假唤醒(Spurious Wakeup)详解:从概念到实践
开发语言·网络
最爱菠萝29 分钟前
Java中浮点数运算存在的精度问题以及解决方法
java
张某布响丸辣31 分钟前
SQL关键字的优先级执行顺序:深入理解SQL查询的构造
java·sql·mysql·面试
杭电码农-NEO35 分钟前
【C++拓展(四)】秋招建议与心得
开发语言·c++·求职招聘