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();
浙公网安备 33010602011771号