状态模式

状态模式

状态(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();
    }
}
相关推荐
尘似鹤6 分钟前
c++注意点(15)----状态模式
状态模式
边洛洛13 分钟前
next.js项目部署流程
开发语言·前端·javascript
爱幻想-hjyp19 分钟前
【Python】uv包管理器常用命令
开发语言·python·uv
哈皮Superman29 分钟前
【Research】MagicFuzzer: Scalable deadlock detection for large-scale applications
java·开发语言·数据库
lly20240629 分钟前
NoSQL 简介
开发语言
千里马-horse36 分钟前
Boost.Iostreams 简介
开发语言·c++·boost
yi碗汤园1 小时前
【一文了解】八大排序-冒泡排序、选择排序
开发语言·前端·算法·unity·c#·1024程序员节
是苏浙1 小时前
零基础入门C语言之深入了解指针3
c语言·开发语言
陌路201 小时前
C17值类别概念
开发语言·c++
I'm Jie1 小时前
(二)Gradle 依赖仓库及安全凭证配置
java·spring boot·spring·gradle·maven