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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("该下班了哦");
        }
    }

}

 

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

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

以上是关于java 之 状态模式(大话设计模式)的主要内容,如果未能解决你的问题,请参考以下文章

大话设计模式-状态模式(大鸟和小菜Java版)

java 之 模板模式(大话设计模式)

java 之 工厂模式(大话设计模式)

大话设计模式之状态模式

&lt;十二&gt;读&lt;&lt;大话设计模式&gt;&gt;之状态模式

java 之 外观模式(大话设计模式)