行为型模式-状态模式

using System;
using System.Text;
using System.Collections.Generic;

namespace 状态模式
{
/*
* 状态模式意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
*
* 状态模式使用场景:1、当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时
* 2、状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化
*
*/


///<summary>
/// 抽象状态,定义状态公共处理方法
///</summary>
publicabstractclass State
{
publicabstractvoid Handler(Context context);
}
///<summary>
/// 上下文,维护一个状态State的具体子类
///</summary>
publicclass Context
{
private State state;

public State State
{
get { return state; }
set { state = value; }
}

public Context(State state)
{
this.state = state;
}

publicvoid Request()
{
state.Handler(
this);
}
}

///<summary>
/// 状态A
///</summary>
publicclass ConcreteStateA : State
{
///<summary>
/// 在状态处理方法中设置跟换状态
///</summary>
///<param name="context"></param>
publicoverridevoid Handler(Context context)
{
context.State
=new ConcreteStateB();
}
}

publicclass ConcreteStateB : State
{
publicoverridevoid Handler(Context context)
{
context.State
=new ConcreteStateC();
}
}

publicclass ConcreteStateC : State
{
publicoverridevoid Handler(Context context)
{
context.State
=new ConcreteStateA();
}
}

publicclass AppClient
{
publicstaticvoid Main(string[] args)
{

Context context
=new Context(new ConcreteStateA());
context.Request();
context.Request();
context.Request();

}

}
}
posted @ 2011-03-22 22:39  日月之明  阅读(427)  评论(0编辑  收藏  举报