在JAVA中实现简单的状态模式
问题:
一个项目有以下三个阶段:开始阶段、运行阶段和完成阶段,一开始项目处于开始阶段,可以通过运行阶段到达完成阶段,而一个程序应该如何正确地表示这三个阶段呢?
首先可以想到的是利用一个state变量和if-else语句来实现,但是很容易发现实现起来会造成代码的冗余,因此为了方便与直观,可以使用状态模式来实现状态的转换。
首先来看一下下面这个例子的继承关系图:
其中State是一个抽象了,声明了一个受保护的变量,这里为Project:
然后分别定义StartState、RunningState和CompleteState,其中需要注意不同状态下的操作是否合理,如下:
接下来需要实现的是Project类,在类中定义了相应的三个状态,并设计了setCurrentState方法和对应动作的方法:
在客户端中运行以下代码:
运行结果如下:
总结:
在状态模式中,所有的状态都是一个子类,如果修改状态,只需要修改这个状态的子类即可,同时使得代码结构更加清晰、提高代码扩展性和可维护性。