状态模式
第十个模式:状态模式
10.1问题引入
我们在这里所讨论的是一个通用的技巧:如何对对象内的状态建模-通过创建一个实例变量来持有状态值,并在方法内书写条件代码来处理不同的状态。
糖果机的问题:
这样的设计,会出现以下的问题:
10.2解决方案:
定义状态接口和类:
定义每个状态类:
。。。。。。。。。。。。。
然后,定义GumballMachine类:
我们可以看到,这样可以实现哪些事情:
10.3引入状态模式:
状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
以状态模式而言,我们将一群行为封装在状态对象中,context的行为随时可委托到那些状态对象中的一个。
对于状态模式,我们可以对主题对象自由的扩张状态,如下:
10.4小结: