一、 问题描述
请对程序员一天的工作状态进行模拟:
12点前:上午工作,精神百倍
13点前:饿了午饭,犯困午休
17点前:状态不错,努力工作
17点以后:工作是否完成?
完成:下班回家
没有:
21点前:加班工作,疲累之极
21点后:扛不住了,倒下睡觉
二、 完成如下题目要求
-
画出静态图
-
写出采用该设计模式的好处
状态模式每个状态的行为封装到对应的类中方便维护
符合开闭原则
- 编写代码
package statePattern;
/**
* 主方法
* @author Sakura
*
*/
public class Main {
public static void main(String[] args) {
Work work=new Work();
work.setTime(12);
work.setTaskFinish(false);
work.workState();
System.out.println("============");
work.setTime(13);
work.workState();
System.out.println("============");
work.setTime(17);
work.workState();
System.out.println("============");
work.setTime(18);
work.workState();
System.out.println("============");
work.setTime(21);
work.workState();
System.out.println("============");
work.setTime(22);
work.workState();
}
}
package statePattern;
public class Work {
private State state;//状态
private int time; //时间
private boolean taskFinish;//任务是否完成
public Work() {
this.state=new Before12();//设置初始状态为12点前
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public boolean isTaskFinish() {
return taskFinish;
}
public void setTaskFinish(boolean taskFinish) {
this.taskFinish = taskFinish;
}
public void workState() {
state.workState(this);
}
}
package statePattern;
//状态抽象
public abstract class State {
public abstract void workState(Work work);
}
package statePattern;
//12点前的状态
public class Before12 extends State {
@Override
public void workState(Work work) {
if(work.getTime()<=12) {
System.out.println("上午工作,精神百倍");
}else {
work.setState(new Before13());
work.workState();
}
}
}
package statePattern;
// 13点前的状态
public class Before13 extends State {
@Override
public void workState(Work work) {
if(work.getTime()<=12) {
System.out.println("饿了午饭,犯困午休");
}else {
work.setState(new Before17());
work.workState();
}
}
}
package statePattern;
//17点前的状态
public class Before17 extends State{
@Override
public void workState(Work work) {
if(work.getTime()<=17) {
System.out.println("状态不错,努力工作");
}else {
work.setState(new Before21());
work.workState();
}
}
}
package statePattern;
//21点前的状态
public class Before21 extends State {
@Override
public void workState(Work work) {
if(work.getTime()<=21) {
System.out.println("加班工作,疲累之极");
}else {
work.setState(new After21());
work.workState();
}
}
}
package statePattern;
//21点后的状态
public class After21 extends State{
@Override
public void workState(Work work) {
System.out.println("扛不住了,倒下睡觉");
}
}