状态模式

第十个模式:状态模式

10.1问题引入

我们在这里所讨论的是一个通用的技巧:如何对对象内的状态建模-通过创建一个实例变量来持有状态值,并在方法内书写条件代码来处理不同的状态。

糖果机的问题:

image

这样的设计,会出现以下的问题:

image

 

10.2解决方案:

image

定义状态接口和类:

image

定义每个状态类:

image

。。。。。。。。。。。。。

然后,定义GumballMachine类:

image

我们可以看到,这样可以实现哪些事情:

image

10.3引入状态模式:

状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

image

以状态模式而言,我们将一群行为封装在状态对象中,context的行为随时可委托到那些状态对象中的一个。

对于状态模式,我们可以对主题对象自由的扩张状态,如下:

image

image

10.4小结:

image

posted @ 2015-05-14 20:54  maverick_fu  阅读(109)  评论(0编辑  收藏  举报