一个对像有不同的状态,不同的状态有不同的行为。也许你会说在方法里加上switch case语句就行了,这样的确能实现这样的方法,但是,就像前面一些设计模式的目的一样,这种方法不具可扩展性,因此我们需要一种设计模式来实现这个功能,并且需要提供可扩展性,因此,就有了状态模式。
来看一个例子:
在这个例子里面,士兵有两个状态。不同的状态,fire()方法是不同的,真正的fire()方法是定义在状态里的,因此,士兵类里的fire()方法只需要调用state.fire()就行了。这样设计的好处,就是让系统具有了可扩展性,当士兵有了新的状态的时候,只需要实现一个新的继承与State类的类就行了。那么士兵就自动具有了这个状态,不需要改动原有的代码。
运行结果为:
普通状态每秒开枪1次。
兴奋状态每秒开枪2次。