状态模式

一、 问题描述

请对程序员一天的工作状态进行模拟:
12点前:上午工作,精神百倍
13点前:饿了午饭,犯困午休
17点前:状态不错,努力工作
17点以后:工作是否完成?
完成:下班回家
没有:
21点前:加班工作,疲累之极
21点后:扛不住了,倒下睡觉

二、 完成如下题目要求

  1. 画出静态图
    在这里插入图片描述

  2. 写出采用该设计模式的好处

状态模式每个状态的行为封装到对应的类中方便维护
符合开闭原则

  1. 编写代码
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("扛不住了,倒下睡觉");
		
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值