状态模式:
当一个对象的内在状态改变时,允许改变其行为。类似状态机。
using System;
using System.Collections.Generic;
using System.Text;
namespace 设计模式
{
abstract class State
{
public abstract void Handle(Context context);
}
class ConcreteStateA : State
{
public override void Handle(Context context)
{
Console.WriteLine("状态A具体处理,并转到状态B");
context.State = new ConcreteStateB();
}
}
class ConcreteStateB : State
{
public override void Handle(Context context)
{
Console.WriteLine("状态B具体处理,并转到状态A");
context.State = new ConcreteStateA();
}
}
class Context
{
private State state = new ConcreteStateA();
public State State
{
get { return state; }
set
{
state = value;
Console.WriteLine("设定当前状态为{0}", state.GetType().Name);
}
}
public void HandleRequest()
{
Console.WriteLine("调用状态处理");
state.Handle(this);
}
}
class Costume
{
//客户端程序
static void Main(string[] args)
{
Context context1 = new Context();
context1.HandleRequest();
context1.HandleRequest();
context1.HandleRequest();
context1.HandleRequest();
}
}
}
运行结果:
调用状态处理
状态A具体处理,并转到状态B
设定当前状态为ConcreteStateB
调用状态处理
状态B具体处理,并转到状态A
设定当前状态为ConcreteStateA
调用状态处理
状态A具体处理,并转到状态B
设定当前状态为ConcreteStateB
调用状态处理
状态B具体处理,并转到状态A
设定当前状态为ConcreteStateA