设计模式之状态模式

  状态模式是策略模式的孪生兄妹,也属于行为型设计模式,GOF《设计模式》中给状态模式下的定义为:允许一个对象在其内部状态改变时改变它的行为。这有点像策略模式根本不同环境使用不同的行为(策略),状态模式只是这种环境是对象内部的状态集合。

  能够让程序根据不同的外部情况来做出不同的响应,最直接的方法就是在程序中将这些可能发生的外部情况全部考虑到,使用if else 语句来进行代码响应选择。但是这种方法对于复杂一点的状态判断,就会显得杂乱无章,容易产生错误;而且增加一个新的状态将会带来大量的修改。这个时候“能够修改自身”的状态模式的引入也许是个不错的主意。

  状态模式可以有效的替换充满在程序中的 if else 语句:将不同条件下的行为封装在一个类里面,再给这些类一个统一的父类来约束他们。来看一下状态模式的角色组成吧:
  1) 使用环境(Context)角色:客户程序是通过它来满足自己的需求。它定义了客户程序需要的接口;并且维护一个具体状态角色的实例,这个实例来决定当前的状态。
  2) 状态(State)角色:定义一个接口以封装与使用环境角色的一个特定状态相关的行为。
  3) 具体状态(Concrete State)角色:实现状态角色定义的接口。

  由于状态模式结构非常简单,所以在这里罗列一些反映状态模式实现结构的代码没有什么太大的作用。如果你有兴趣的话可以按照上面类图来编写一下。

posted @ 2014-12-09 11:09  Simba.Chen  阅读(140)  评论(0编辑  收藏  举报