设计模式之行为型模式一(三)

2014-11-24 11:07:23 · 作者: · 浏览: 1
的状态
如图:
代码如下:
[csharp]
//工作类
public class work
{
private State current;
public work()
{
current =new ForenoonState();
}
private double hour;
public double Hour
{
get { return hour; }
set { hour = value; }
}
private bool finish = false;
public bool TaskFinished
{
get { return finish; }
set { finish = value; }
}
public void SetState(State s)
{
current = s;
}
public void WriteProgram()
{
current.WriteProgram(this);
}
}
public abstract class State
{
public abstract void WriteProgram(work w);
}
//上午工作状态
public class ForenoonState : State
{
public override void WriteProgram(work w)
{
if (w.Hour < 12)
{
Console.WriteLine("当前时间:{0}点 上午工作,精神百倍", 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("当前时间:{0}点 饿了 午饭 犯困 午休", w.Hour);
}
else
{
w.SetState(new AfternoonState()); w.WriteProgram();
}
}
}
//下午工作状态
public class AfternoonState : State
{
public override void WriteProgram(work w)
{
if (w.Hour < 17)
{
Console.WriteLine("当前时间:{0}点 下午状态还不错,继续努力", w.Hour);
}
else
{
w.SetState(new EveningState()); w.WriteProgram();
}
}
}
//晚间工作状态
public class EveningState : State
{
public override void WriteProgram(work w)
{
if (w.TaskFinished )
{
w.SetState(new RestState());
w.WriteProgram();
}
else
{
if (w.Hour < 21)
{
Console.WriteLine("当前时间:{0}点 加班,疲累之极", w.Hour);
}
else
{
w.SetState(new SleepingState()); w.WriteProgram();
}
}
}
}
//睡眠状态
public class SleepingState : State
{
public override void WriteProgram(work w)
{
Console.WriteLine("当前时间:{0}点不行了,睡着了", w.Hour);
}
}
//下班休息状态
public class RestState : State
{ www.2cto.com
public override void WriteProgram(work w)
{
Console.WriteLine("当前时间:{0}点下班回家了", w.Hour);
}
}