emergencyProjects.sethour(10);
emergencyProjects.WriteProgram();
emergencyProjects.sethour(12);
emergencyProjects.WriteProgram();
emergencyProjects.sethour(13);
emergencyProjects.WriteProgram();
emergencyProjects.sethour(14);
emergencyProjects.WriteProgram();
emergencyProjects.sethour(17);
emergencyProjects.WriteProgram();
emergencyProjects.setTaskFinish(false);
emergencyProjects.WriteProgram();
emergencyProjects.sethour(19);
emergencyProjects.WriteProgram();
emergencyProjects.sethour(22);
emergencyProjects.WriteProgram();
System.out.println();
}
}
abstract class State
{
public abstract void WriteProgram(Work w);
}
class ForenoonState extends State
{
public void WriteProgram(Work w)
{
if(w.gethour() < 12)
{
System.out.println("当前时间:"+w.gethour()+"点,上午工作,精神百倍");
}else{
w.SetState(new NoonState());
w.WriteProgram();
}
}
}
class NoonState extends State
{
public void WriteProgram(Work w)
{
if(w.gethour() < 13)
{
System.out.println("当前时间:"+w.gethour()+"点,饿了,午饭;犯困,午休");
}else{
w.SetState(new AfternoonState());
w.WriteProgram();
}
}
}
class AfternoonState extends State
{
public void WriteProgram(Work w)
{
if(w.gethour() < 17)
{
System.out.println("当前时间:"+w.gethour()+"点,下午状态还不错,继续努力");
}else{
w.SetState(new EveningState());
w.WriteProgram();
}
}
}
class EveningState extends State
{
public void WriteProgram(Work w)
{
if(w.getTaskFinish())
{
w.SetState(new RestState());
w.WriteProgram();
}else{
if(w.gethour() < 12)
{
System.out.println("当前时间:"+w.gethour()+"点,加班哦,疲累之极");
}else{
w.SetState(new SleepingState());
w.WriteProgram();
}
}
}
}
class SleepingState extends State
{
public void WriteProgram(Work w)
{
System.out.println("当前时间:"+w.gethour()+"点 不行了,睡着了");
}
}
class RestState extends State
{
public void WriteProgram(Work w)
{
System.out.println("当前时间:"+w.gethour()+"点 下班回家了");
}
}
class Work
{
private State current;
public Work()
{
current = new ForenoonState();
}
private double hour;
public double gethour()
{
return hour;
}
public void sethour(double hour)
{
this.hour = hour;
}
private boolean finish = false;
public boolean getTaskFinish()
{
return finish;
}
public void setTaskFinish(boolean finish)
{
this.finish = finish;
}
public void SetState(State s)
{
current = s;
}
public void WriteProgram()
{
current.WriteProgram(this);
}
}