设计模式学习(十四)(状态模式)

模式名称

状态模式(State Pattern)

解决问题

对象的行为依赖于他内部的状态,当状态发生改变时其中内部的行为可能发生改变。

就拿自动售货机来说,他有很多状态:准备接收硬币、选择饮料、放出饮料、饮料售完等几个状态,这几个状态会因为用户所做的动作不同发生不同的变化。并且在不同的状态时,机器对同一操作的反应也有所不同。这时候我们如果把饮料机就设置为一个类,并且根据常量来限定状态会造成一个函数里大量的if语句,代码也非常冗长,改变起来不那么容易。但是如果我们把每个状态的机器都设为一个类,我们就可以把不同状态的不同行为分离开来。

解决方法

1.创建state接口。

2.创建实现state接口的实体类。

3.创建context类,其中包括状态对象。

4.进行调用。

状态模式的优点

1.封装了转换规则。

2.枚举出所有可能的状态。

3.将不同的状态放到不同的类当中,方便添加新的状态。

4.消除巨大的if else语句块。

状态模式的缺点

1.产生大量的类。

2.在添加新状态时需要修改状态转换规则。

3.实现可能较为复杂。

源码

(完)

打赏