• 设计模式——状态模式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

    代码下载

    代码下载

  • 相关阅读:
    配置你的VsCode服务器,随时随地写代码!
    wps批量删除空白单元格
    【Anaconda】conda阿里云镜像源配置
    k8s--基础--22.13--storageclass--类型--ScaleIO
    【Git】第一篇:Git安装(centos)
    windows 不能ping通虚拟机问题
    dom——页面的渲染过程
    CNN模型合集 | Resnet变种-WideResnet解读
    89.(前端)商品分类显示优化——关闭选择框、下拉框、修改间隔、显示层级为tag标签、添加操作栏、添加索引
    ERROR: [Place 30-675]
  • 原文地址:https://blog.csdn.net/qq_45178641/article/details/137855538