您的位置:首页 > 其它

状态模式

2015-12-01 08:45 316 查看
《重构》一书中第一章的例子中,讲到了用状态模式代替分支语句的判断。觉得有必要复习一下状态模式,状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的逻辑判断转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。当一个对象的行为取决于它的状态,并且必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;

namespace ConsoleApplication11
{
class Context
{
private state state;

public state State
{
get { return state; }
set
{
state = value;
Console.Write("current state instance is "+state.GetType().Name);
}
}

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

public void Request()
{
state.Handle(this);
}
}
/// <summary>
/// 抽象状态类
/// </summary>
abstract class state
{
public abstract void Handle(Context c);
}

class StateA : state
{
public override void Handle(Context c)
{
Console.WriteLine(c.State);
}
}

class StateB : state
{
public override void Handle(Context c)
{
Console.WriteLine(c.State);
}
}

class Program
{
static void Main(string[] args)
{
Context c = new Context(new StateA());
c.Request();
Context c1 = new Context(new StateB());
c1.Request();
Console.Read();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  重构 状态