工作狀態 狀態模式 版本

工作狀態 狀態模式 版本

工作狀態 狀態模式 版本

工作狀態 狀態模式 版本

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 Work
{
private State current;
public Work()
{
current = new ForenoonState();
}
private double hour;
public double Hour
{
get { return hour; }
set { hour = value; }
}


}

static void Main(string[] args)
{
Work emergencyProjects = new Work();

emergencyProjects.Hour = 9;
emergencyProjects.WriteProgram();
emergencyProjects.Hour = 10;
emergencyProjects.WriteProgram();
...
...
...

}

如果要完成「員工必須在20點之前離開公司」,要怎麼做?
增加一個強制下班狀態,並修改一下傍晚工作狀態的判斷
而不會影響其它狀態的程式碼。