
状态的总接口
public abstract class State {
public abstract void WriteProgram(Work work);
}
具体的六个状态 代表了上班的一天
public class ForenoonState extends State {
@Override
public void WriteProgram(Work work) {
if (work.getHour() < 12) {
System.out.println("当前时间: " + work.getHour() + " 上午工作 精神百倍");
} else {
work.setCurrent(new NoonState());
work.WriteProgram();
}
}
}
public class NoonState extends State {
@Override
public void WriteProgram(Work work) {
if (work.getHour() < 13) {
System.out.println("当前时间: " + work.getHour() + " 中午了 饿了 午饭 犯困 午休");
} else {
work.setCurrent(new AfternoonState());
work.WriteProgram();
}
}
}
public class AfternoonState extends State {
@Override
public void WriteProgram(Work work) {
if (work.getHour() < 17) {
System.out.println("当前时间: " + work.getHour() + " 下午工作 状态还不错 继续努力");
} else {
work.setCurrent(new EveningState());
work.WriteProgram();
}
}
}
public class EveningState extends State {
@Override
public void WriteProgram(Work work) {
if (work.isFinish()) {
work.setCurrent(new RestState());
work.WriteProgram();
} else {
if (work.getHour() < 21) {
System.out.println("当前时间: " + work.getHour() + " 唉 加班哦 ");
} else {
work.setCurrent(new SleepingState());
work.WriteProgram();
}
}
}
}
public class RestState extends State {
@Override
public void WriteProgram(Work work) {
System.out.println("当前时间: " + work.getHour() + " 下班回家了");
}
}
public class SleepingState extends State {
@Override
public void WriteProgram(Work work) {
System.out.println("当前时间: " + work.getHour() + " 不行了 睡着了");
}
}
工作类 其实就是Context上下文对象 用来管理不同的状态 对外提供接口
public class Work {
private State current;
private double hour;
private boolean finish = false;
public Work() {
this.current = new ForenoonState();
}
public void WriteProgram() {
current.WriteProgram(this);
}
public State getCurrent() {
return current;
}
public void setCurrent(State current) {
this.current = current;
}
public double getHour() {
return hour;
}
public void setHour(double hour) {
this.hour = hour;
}
public boolean isFinish() {
return finish;
}
public void setFinish(boolean finish) {
this.finish = finish;
}
}
测试类
public class Main {
public static void main(String[] args) {
Work work = new Work();
work.setHour(9);
work.WriteProgram();
work.setHour(10);
work.WriteProgram();
work.setHour(12);
work.WriteProgram();
work.setHour(13);
work.WriteProgram();
work.setHour(14);
work.WriteProgram();
work.setHour(17);
work.WriteProgram();
work.setHour(19);
work.WriteProgram();
work.setHour(17);
work.WriteProgram();
}
}
控制台输出
