昨天本学期所有课程结课嗨了一天都没来得及更新。。。今天学习的是状态模式。
状态模式(State Pattern)
定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
角色:
环境类(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。
抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。
具体状态(Concrete State):实现抽象状态定义的接口。
类图:
代码:
Context.cs
class Context
{
private State state;
public Context(State state)
{
this.state = state;
}
public State State
{
get { return state; }
set { state = value;
Console.WriteLine("当前状态为:" + state.GetType().Name);
}
}
public void Request()
{
state.Handle(this);
}
}
State.cs
abstract class State
{
public abstract void Handle(Context context);
}
ConcreteStateA.cs
class ConcreteStateA : State
{
public override void Handle(Context context)
{
context.State = new ConcreteStateB();
}
}
ConcreteStateB.cs
class ConcreteStateB : State
{
public override void Handle(Context context)
{
context.State = new ConcreteStateC();
}
}
ConcreteStateC.cs
class ConcreteStateC : State
{
public override void Handle(Context context)
{
context.State = new ConcreteStateA();
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
Context c = new Context(new ConcreteStateA());
c.Request();
c.Request();
c.Request();
c.Request();
Console.ReadKey();
}
}