状态模式 -- 大话设计模式
在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
状态模式:当一个对象内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类
将与特定状态相关的行为局部化,并且将不同状态的行为分割开来
1.男人吃饱了工作,饿了不想工作
早上起来,男人吃了饭,大喊一声,我吃饱了,开始工作了;工作了12个小时候,还没吃饭~,大喊一声,我饿了,不想工作了
定义抽象状态类,以及具体的吃饱和饥饿状态类,定义每个状态对应的行为方式
/// <summary>
/// 抽象状态类
/// </summary>
public abstract class State
{
public abstract void Action(Man man);
}
/// <summary>
/// 吃饱状态
/// </summary>
public class FullState : State
{
public override void Action(Man man)
{
Console.WriteLine("我吃饱了,开始工作了");
}
}
/// <summary>
/// 饥饿状态
/// </summary>
public class HungeryState : State
{
public override void Action(Man man)
{
Console.WriteLine("我饿了,不想工作了");
}
}
定义男人类(执行具体的业务)
/// <summary>
/// 男人类
/// </summary>
public class Man
{
private State currentState;
public Man(State state)
{
this.currentState = state;
}
public void Work()
{
Console.WriteLine("我已经工作了12个小时了,还没吃饭呢~");
this.currentState = new HungeryState();
}
public void Say()
{
currentState.Action(this);
}
}
开启场景模拟
static void Main(string[] args)
{
//早上起来,男人吃了饭
Man man = new Man(new FullState());
//大喊一声,我吃饱了,开始工作了
man.Say();
//工作了12个小时候,还没吃饭~
man.Work();
//大喊一声,我饿了,不想工作了
man.Say();
}

浙公网安备 33010602011771号