1、概述:

  当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,这时候就可以考虑一下使用状态模式。

  状态模式和前面讲过的策略模式有一定的相似之处,不同之处在于状态模式每个状态之间是可以相互转化的,策略模式定义的每个算法都是独立的。

2、定义:

  当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

3、UML类图:

 

4、角色介绍:

  Context类:是控制上下文的类,起到中间处理的作用,这个类接受客户端的请求,根据客户端传入的状态值,来动态的调用状态类,然后状态类对应在做相应的行为变化。

  State类:抽象状态基类,接收Context的信息,然后进行相应的处理。

5、示例代码:下面以一天的不同时间段的工作状态为例:

  state类:

  abstract class State

  {

    public abstract void WriteProgram(Work w);

  }

  状态子类:

  class ForenonState:State---上午状态类

  {

    public override void WriteProgram(Work w)

    {

      if(w.Hour <12)---时间小于12点,代表上午

      {

        ...........

      }

      else----不满足条件,跳转到中午状态

      {

        w.SetState(new NoonState());

        w.WriteProgram();

      }

    }

  }

  class NoonState:State

  {

    public override void WriteProgram(Work w)

    {

      if(w.Hour<13)---时间小于13,代表中午

      {.......}

      else

      {

        w.SetState(....);w.WriteProgram();----继续切换到下一个状态。

      }

    }

  }

  .....

工作类:

  class Work----操作上下文类

  {

    private State current;---当前状态

    public Work()

    {

      current =new ForenooState();-----初始化最早的状态

    }

    public double Hour{get;set;}

    public void SetState(State s)

    {

      current =s;

    }

    public void WriteProgram()

    {

      current.WriteProgram(this);

    }

  }

 客户端调用:

Work work =new Work();

work.Hour=9;

work.WriteProgram();

work.Hour=13;

work.WriteProgram();

posted on 2013-07-30 16:22  Kelly_HanShuai  阅读(100)  评论(0)    收藏  举报