状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
package state;
/**
* 状态模式(State)
* 抽象状态
*/
public abstract class State {
public abstract void coding(Work work);
}
package state;
/**
* 状态模式(State)
* 上午工作状态
*/
public class ForenoonState extends State {
@Override
public void coding(Work work) {
if (work.getHour() < 12) {
System.out.println("当前时间:" + work.getHour() + "点 上午工作,精神百倍!");
} else {
work.setState(new NoonState());
work.coding();
}
}
}
package state;
/**
* 状态模式(State)
* 中午工作状态
*/
public class NoonState extends State {
@Override
public void coding(Work work) {
if (work.getHour() < 13) {
System.out.println("当前时间:" + work.getHour() + "点 饿了,午饭;犯困,午休!");
} else {
work.setState(new AfternoonState());
work.coding();
}
}
}
package state;
/**
* 状态模式(State)
* 下午工作状态
*/
public class AfternoonState extends State {
@Override
public void coding(Work work) {
if (work.isFinish()) {
work.setState(new RestState());
work.coding();
} else {
if (work.getHour() < 17) {
System.out.println("当前时间:" + work.getHour() + "点 下午状态还不错,继续努力!");
} else {
work.setState(new EveningState());
work.coding();
}
}
}
}
package state;
/**
* 状态模式(State)
* 晚间工作状态
*/
public class EveningState extends State {
@Override
public void coding(Work work) {
if (work.isFinish()) {
work.setState(new RestState());
work.coding();
} else {
if (work.getHour() < 21) {
System.out.println("当前时间:" + work.getHour() + "点 加班哦,疲累之极!");
} else {
work.setState(new SleepingState());
work.coding();
}
}
}
}
package state;
/**
* 状态模式(State)
* 睡眠状态
*/
public class SleepingState extends State {
@Override
public void coding(Work work) {
System.out.println("当前时间:" + work.getHour() + "点 不行了,睡着了!");
}
}
package state;
/**
* 状态模式(State)
* 下班休息状态
*/
public class RestState extends State {
@Override
public void coding(Work work) {
System.out.println("当前时间:" + work.getHour() + "点 下班回家了!");
}
}
package state;
/**
* 状态模式(State)
* 工作类
*/
public class Work {
private int hour;
private State current;
private boolean finish = false;
public Work() {
current = new ForenoonState();
}
public int getHour() {
return hour;
}
public void setHour(int hour) {
this.hour = hour;
}
public boolean isFinish() {
return finish;
}
public void setFinish(boolean finish) {
this.finish = finish;
}
public State getState() {
return current;
}
public void setState(State current) {
this.current = current;
}
public void coding() {
current.coding(this);
}
}
package state;
/**
* 状态模式(State)
* 客户端main方法
*/
public class Client {
public static void main(String[] args) {
Work work = new Work();
work.setHour(9);
work.coding();
work.setHour(10);
work.coding();
work.setHour(12);
work.coding();
work.setHour(13);
work.coding();
work.setHour(14);
work.coding();
work.setHour(17);
work.coding();
// work.setFinish(true);
work.setHour(19);
work.coding();
work.setHour(22);
work.coding();
}
}