• 设计模式——状态模式19


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

    在这里插入图片描述

    状态行为抽象

    //在某种状态下,能做什么事情。
    public interface State {
        void play();
        void  study();
        void  battle();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    状态行为实现

    /**
     * @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("无战斗技能");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    /**
     * @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("释放:降猪十八掌");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    上下文

    /**
     * @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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    测试与结果

    /**
     * @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();// 调用行为
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    总结

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

    在望子成龙小学,与同学玩耍
    在望子成龙小学,认真学习
    无战斗技能
    ===============
    不玩耍
    学习效率提升300%
    释放:降猪十八掌
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    代码下载

    代码下载

  • 相关阅读:
    Linux文件、目录操作命令
    基于java的校园论坛系统,ssm+jsp,Mysql数据库,前台用户+后台管理,完美运行,有一万多字论文
    ArrayList 源码分析
    Linux安装pycharm
    Django笔记三十七之多数据库操作(补充版)
    我在前端写Java SpringBoot项目
    SpringCloud学习笔记-Nacos服务分级存储模型
    面渣逆袭:Spring三十五问,四万字+五十图详解
    Java线程池ThreadPoolExecutor详解(一篇就够了)
    笔记本电脑查询连接wifi密码
  • 原文地址:https://blog.csdn.net/qq_45178641/article/details/137855538