设计模式——状态模式19

状态模式是一种行为设计模式, 允许一个对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。状态模式的核心是状态与行为绑定,不同的状态对应不同的行为。
设计模式,一定要敲代码理解

状态行为抽象

java 复制代码
//在某种状态下,能做什么事情。
public interface State {
    void play();
    void  study();
    void  battle();
}

状态行为实现

java 复制代码
/**
 * @author ggbond
 * @date 2024年04月17日 08:34
 * 猪猪侠 正常状态
 */
public class normalState implements  State{
    @Override
    public void play() {
        System.out.println("在望子成龙小学,与同学玩耍");
    }

    @Override
    public void study() {
        System.out.println("在望子成龙小学,认真学习");
    }

    @Override
    public void battle() {
        System.out.println("无战斗技能");
    }
}
java 复制代码
/**
 * @author ggbond
 * @date 2024年04月17日 08:35
 * 猪猪侠 吃超级棒棒糖后的状态
 */
public class lollipopsState implements State{
    @Override
    public void play() {
        System.out.println("不玩耍");
    }

    @Override
    public void study() {
        System.out.println("学习效率提升300%");
    }

    @Override
    public void battle() {
        System.out.println("释放:降猪十八掌");
    }
}

上下文

java 复制代码
/**
 * @author ggbond
 * @date 2024年04月17日 08:29
 */
public class Context {
    private  State state;
    public void play(){
        this.state.play();
    }
    public void  study(){
        this.state.study();
    }
    public void  battle(){
        this.state.battle();
    }

    public State getState() {
        return state;
    }

    public void setState(State state) {
        this.state = state;
    }
}

测试与结果

java 复制代码
/**
 * @author ggbond
 * @date 2024年04月17日 08:43
 */
public class Main {
    public static void main(String[] args) {
        Context context = new Context(); // 新建一个上下文
        context.setState(new normalState()); // 设置当前状态
        context.play();
        context.study();
        context.battle();// 调用行为
        System.out.println("===============");

        context.setState(new lollipopsState());
        context.play();
        context.study();
        context.battle();// 调用行为
    }
}

总结

满足单一职责原则, 开闭原则。 无需修改已有状态类和上下文就能引入新状态。状态模式在处理具有多种状态和状态转换的对象时非常有用,可以提高代码的质量和可维护性。

java 复制代码
在望子成龙小学,与同学玩耍
在望子成龙小学,认真学习
无战斗技能
===============
不玩耍
学习效率提升300%
释放:降猪十八掌

代码下载

代码下载

相关推荐
闪电悠米1 分钟前
黑马点评-优惠券秒杀-03_basic_seckill_and_oversell
java·数据库·spring boot·spring·缓存·oracle·面试
兰令水1 分钟前
leecodecode【双指针题2】【2026.5.26打卡-java版本】
java·开发语言·算法
ch.ju3 分钟前
Java程序设计(第3版)第四章——引用
java·开发语言
霸道流氓气质4 分钟前
在Qoder中指定JDK和Maven运行AI学习的SpringBoot项目的完整指南
java·人工智能·maven
老码观察5 分钟前
设计模式实战解读(七):适配器模式——让不兼容的接口无缝协作
java·设计模式·适配器模式
garmin Chen6 分钟前
rabbitmq(1):核心机制与 SpringAMQP 详解
java·rabbitmq·java-rabbitmq
Mr_sst10 分钟前
AI 大模型应用开发实习|如何找岗 + 面试真题 + 面经总结
java·人工智能·ai·面试·职场和发展
前端不太难12 分钟前
内存带宽、超长上下文与解码效率:AI推理的三大核心制约
人工智能·状态模式
weelinking14 分钟前
【产品】10_搭建前端框架——把你的原型变成真实页面
java·大数据·前端·数据库·人工智能·python·前端框架
一 乐16 分钟前
图书电子商务网站系统|基于SprinBoot+vue图书电子商务网站设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·图书电子商务网站系统