// 抽象状态,每种状态对应一种行为public abstract class State { public abstract void WriteProgram(Work w);}// 上午工作状态public class ForenonState extends State { @Override public void WriteProgram(Work w) { if(w.Hour<12){ System.out.println("当前时间:"+w.Hour+",上午工作,精神百倍"); }else{// 超过12点,则转入中午工作状态 w.SetState(new NoonState()); w.WriteProgram(); } }}// 下午工作状态public class AfternoonState extends State { @Override public void WriteProgram(Work w) { if(w.Hour<18){ System.out.println("当前时间:"+w.Hour+",下午工作状态还不错,继续努力"); }else{// 超过18点,则转入晚间工作状态 w.SetState(new EveningState()); w.WriteProgram(); } }}// 晚间工作状态public class EveningState extends State { @Override public void WriteProgram(Work w) { if(w.TaskFinished){ w.SetState(new RestStae()); w.WriteProgram(); }else{ if(w.Hour<=22){ System.out.println("当前时间:"+w.Hour+",加班哦,疲惫至极"); }else{// 超过21点,则转入睡眠状态 w.SetState(new SleepingState()); w.WriteProgram(); } } }}// 下班休息状态public class RestStae extends State { @Override public void WriteProgram(Work w) { System.out.println("当前时间:"+w.Hour+",下班了回家了"); }}// 睡眠状态public class SleepingState extends State { @Override public void WriteProgram(Work w) { System.out.println("当前时间:"+w.Hour+",不行了,睡着了"); }}// 工作,定义当前状态 public class Work { private State currentState; public Work(){ currentState = new ForenonState(); } public int Hour; public boolean TaskFinished; public void SetState(State state){ currentState=state; } public void WriteProgram(){// 设置状态,判断状态是否和当前一致,是否能处理,不是再下一个 currentState.WriteProgram(this); }}public class Test { public static void main(String[] args) { Work work =new Work(); work.Hour=9; work.WriteProgram(); work.Hour=13; work.WriteProgram(); work.Hour=14; work.WriteProgram(); work.Hour=20; work.WriteProgram();// work.TaskFinished=true; work.Hour=23; work.WriteProgram(); }}