状态模式就是升级版的策略模式!它解决的也是程序中常见的条件可能变化的if/else或者switch/case语句,不同的是状态模式在状态发生改变时,其内部会使其指向下一种状态,无需调用者做出选择。这样解释好像还是太抽象了,算了,先看定义吧。
状态模式的定义:允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。
看看上面的定义,是不是更抽象了...
还是用实际程序中例子来解释吧。我们在程序中会常常操作一个网络对象,比如一个TCP的操作,我们会调用诸如Start,Connect,Stop等等的操作,在进行完一个操作后,TCP对象的状态就会改变,这样下一次操作时我们会检测当前TCP对象是什么状态,然后再进行相应的操作。也是就是我们会根据当前TCP对象的状态来进行相应的操作。总之,要是按照正常的思路来写,就是一堆if/else。显然,如果这里的状态很多话,那写起来可就费劲了,搞不好就被自己绕晕了。这个时候就可以亮出状态模式了。
UML结构图如下:
下面我用伪码来表述上面的例子。
//先按照正常写代码的思路来写
//