状态模式:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态转换的条件表达使过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,
可以把复杂的判断逻辑简化。
当一个对象的行为取决于它的状态,并且他必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 状态模式
{
public abstract class State
{
public abstract void WriteProgram(Work w);
}
public class Work
{
private State current;
public Work()
{
current = new ForeState();
}
private double hour;
public double Hour
{
get{return hour;}
set{hour=value;}
}
private bool finish=false;
public bool Finish
{
get{return finish;}
set{finish=value;}
}
public void SetState(State s)
{
current=s;
}
public void WriteProgram()
{
current.WriteProgram(this);
}
}
public class ForeState : State
{
public override void WriteProgram(Work w)
{
if (w.Hour < 12)
{
Console.WriteLine("the time is{0} fighting", w.Hour);
}
else
{
w.SetState(new NoonState()); //状态转换
w.WriteProgram();
}
}
}
public class NoonState : State
{
public override void WriteProgram(Work w)
{
if (w.Hour < 13)
Console.WriteLine("the Time is {0} relax", w.Hour);
else
{
w.SetState(new AfterNoon());
w.WriteProgram();
}
}
}
public class AfterNoon : State
{
public override void WriteProgram(Work w)
{
Console.WriteLine("it is time to sleep");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("begin");
Work w = new Work();
w.Hour = 13;
w.WriteProgram();
}
}
}