一、状态模式简介(Brief Intro
du
ction)
状态模式(
State Pattern
),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
二、解决的问题(What To Solve)
状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。
当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。
三、状态模式分析(Analysis)
1、状态模式结构
Context
类:
维护一个
ConcreteState
子类的一个实例,这个实例定义当前的状态。
State
类:
抽象状态类,定义一个接口以封装与
Context
的一个特定状态相关的行为。
ConcreteStateA,ConcreteStateB,ConcreteStateC
类:
具体状态类,每一个子类实现一个与
Context
的一个状态相关的行为。
2、源代码
1
、
Context
类:
维护一个
ConcreteState
子类的一个实例,这个实例定义当前的状态
|
public
class Context
{
private State
state;
public
{
get
{ return
state; }
set
{
state = value
;
Console
.WriteLine("
当前状态是:"
+ state.GetType().Name);
}
}
public
Context(State
state)
{
this
.state = state;
Console
.WriteLine("
初始状态是:"
+state.GetType().Name);
}
public void
Request()
{
state.Handle(this
);
}
}
|
2
、
抽象状态类及其具体实现类
|
public
abstract class State
{
public abstract void
Handle(Context
context);
}
public
class ConcreteStateA
:State
{
public override void
Handle(Context
context)
{
context.State = new ConcreteStateB
();
}
}
public
class ConcreteStateB
: State
{
public override void
Handle(Context
context)
{
context.State = new ConcreteStateC
();
}
}
public
class ConcreteStateC
: State
{
public override void
Handle(Context
context)
{
context.State = new ConcreteStateA
();
}
}
|
4
、客户端代码
|
static
void
{
Context
context = new Context
(new ConcreteStateA
());
context.Request();
context.Request();
context.Request();
Console
.Read();
}
|
3、程序运行结果
本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/270542,如需转载请自行联系原作者