• java 之 状态模式(大话设计模式)


    看过大话设计模式的小伙伴,都知道大话设计模式中的demo代码不是JAVA的,对于编程来说,设计模式不限于任何语言,讲述的是编程的思想。

    今天笔者再次看这篇文章时,看了下别人的博客对于设计模式的理解,希望能汲取点其中的核心思想,意外的是看到很多博客对状态模式理解的可能有些偏差。

    正常来说,如果没有状态模式的情况下,我们会用一堆if else if或者 switch case来处理。寻找到正确的入口!这样的代码违背了单一原则,日后维护会牵一发而动全身。

    使用状态模式能够很好的解决这个问题,来看下类图

    大话设计模式-类图

    再看下简单的笔者的例子:

    /**
     * 抽象状态接口
     */
    public interface State {
    
        public void WriteProgram(Work work);
    }
    /**
     * 上下文
     */
    public class Work {
    
        private State state;
    
        private Integer hour;
    
        public Work() {
            state = new GoodMorning();
        }
        
        public void writeProgram() {
            state.WriteProgram(this);
        }
    
        public Integer getHour() {
            return hour;
        }
    
        public void setHour(Integer hour) {
            this.hour = hour;
        }
    
        public void setState(State state) {
            this.state = state;
        }
    }
    /**
     * 早晨状态 状态的一个分支
     */
    public class GoodMorning implements State{
    
        @Override
        public void WriteProgram(Work work) {
            if (work.getHour() < 12) {
                System.out.println("工作状态很好啊");
            } else {
                work.setState(new AfterMorning());
                work.writeProgram();
            }
    
        }
    }
    /**
     * 状态的分支 下午状态
     */
    public class AfterMorning implements State {
    
        @Override
        public void WriteProgram(Work work) {
    
            if (work.getHour() < 14) {
                System.out.println("有点困了");
            } else {
                work.setState(new Evening());
                work.writeProgram();
            }
        }
    }
    /**
     * 夜晚状态 状态的一个分支
     */
    public class Evening implements State {
    
        @Override
        public void WriteProgram(Work work) {
            if (work.getHour() >= 19) {
                System.out.println("该下班了哦");
            }
        }
    
    }

    以上是笔者对状态模式的理解,如果需求有变更,增加某些状态,我们只需要在增加子类,如果是在中间插入状态,我们只需要改上一个状态的指向就可以了。

    希望能帮助学习状态模式的小伙伴,不要生搬硬套设计模式,理解其精髓最重要!!!

  • 相关阅读:
    求最大公约数伪代码
    XOR加密
    20201225张晓平第五周学习
    pep9课下作业 张晓平
    20201225 张晓平《信息安全专业导论》第四周学习总结
    寻找黑客偶像 20201225张晓平
    《信息安全专业导论》第九周学习总结
    《信息安全专业导论》第八周学习总结
    《信息安全专业导论》第七周学习总结
    《信息安全专业导论》第6周学习总结
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/7999656.html
Copyright © 2020-2023  润新知