状态模式

状态模式

状态(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();
    }
}
相关推荐
wl85112 分钟前
Spring @Bean注解使用场景二
java·后端·spring
总是学不会.2 分钟前
MyBatis 传递多个参数的方式
java·后端·mybatis·开发
飞奔的马里奥7 分钟前
30天学习Java第六天——super关键字
java·开发语言·学习
四念处茫茫17 分钟前
【C语言系列】C语言内存函数
c语言·开发语言·算法·visual studio
不爱敲代码吖20 分钟前
Python 数据可视化创意工坊:从交互到艺术,解锁数据展示新灵感
开发语言·python·信息可视化
H2X7_24 分钟前
C++之list类(超详细)
开发语言·c++
stevenzqzq1 小时前
java常量池
java·开发语言
“抚琴”的人1 小时前
C#—【在不同的场景该用哪种线程?】
开发语言·c#·多线程
小道士写程序1 小时前
OSG 和 VTK 在JS仿真中应用的更详细对比分析,包括它们的技术特点、适用场景、优缺点以及如何选择或结合使用
开发语言