标签:
一.状态模式的定义:状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
二.状态模式的意图:允许一个对象在其内部状态改变时改变它的行为。
三.状态模式的适用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
四.状态模式的实现:
/// <summary>
/// 定义接口,封装Context对象在特定状态下的行为
/// </summary>
public abstract class AbstractState
{
public abstract void handle(Context context);
} /// <summary>
/// 具体A状态下的对于的行为
/// </summary>
public class ConcreteStateA:AbstractState
{
public override void handle(Context context)
{
Console.WriteLine("当前状态:{0}",this.GetType().ToString());
//改变状态
context.State = new ContextStateB();
}
} /// <summary>
/// 具体B状态下的对于的行为
/// </summary>
public class ContextStateB:AbstractState
{
public override void handle(Context context)
{
Console.WriteLine("当前状态:{0}",this.GetType().ToString());
//改变状态为C
context.State = new ContextStateC();
}
} /// <summary>
/// 具体C状态下的对于的行为
/// </summary>
public class ContextStateC:AbstractState
{
public override void handle(Context context)
{
Console.WriteLine("当前状态:{0}", this.GetType().ToString());
//改变状态为A
context.State = new ConcreteStateA();
}
} public class Context
{
//Context 类需要维护一个ConcreteState 的实例,这个具体状态类的实例给出了此环境下的对象的现有状态。
public AbstractState State { get; set; }
public Context(AbstractState state)
{
this.State = state;
}
public void Request()
{
State.handle(this);
}
} /// <summary>
/// C#设计模式-状态模式
/// </summary>
class Program
{
static void Main(string[] args)
{
Context c = new Context(new ConcreteStateA());
c.Request();//在 ConcreteStateA 中,我将 Context 的状态切换回 ContextStateB ,
c.Request();//而 ContextStateB 中,我将 Context 的状态切换回 ContextStateC,
c.Request();//而 ContextStateC 中,我将 Context 的状态切换回 ConcreteStateA,
c.Request();//这样便实现了 Context 在 A , B ,C 这三种状态中循环的切换。
}
}
标签:
原文地址:http://blog.csdn.net/heyangyi_19940703/article/details/51361309