在JAVA中实现简单的状态模式

问题:

一个项目有以下三个阶段:开始阶段、运行阶段和完成阶段,一开始项目处于开始阶段,可以通过运行阶段到达完成阶段,而一个程序应该如何正确地表示这三个阶段呢?

首先可以想到的是利用一个state变量和if-else语句来实现,但是很容易发现实现起来会造成代码的冗余,因此为了方便与直观,可以使用状态模式来实现状态的转换。

首先来看一下下面这个例子的继承关系图:

在JAVA中实现简单的状态模式

其中State是一个抽象了,声明了一个受保护的变量,这里为Project:

在JAVA中实现简单的状态模式

然后分别定义StartState、RunningState和CompleteState,其中需要注意不同状态下的操作是否合理,如下:

在JAVA中实现简单的状态模式

在JAVA中实现简单的状态模式

在JAVA中实现简单的状态模式

接下来需要实现的是Project类,在类中定义了相应的三个状态,并设计了setCurrentState方法和对应动作的方法:

在JAVA中实现简单的状态模式

在客户端中运行以下代码:

在JAVA中实现简单的状态模式

运行结果如下:

在JAVA中实现简单的状态模式

 

总结:

    在状态模式中,所有的状态都是一个子类,如果修改状态,只需要修改这个状态的子类即可,同时使得代码结构更加清晰、提高代码扩展性和可维护性。