标签:
1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:状态接口 6 * 时间:2016年3月8日下午9:41:17 7 * 作者:cutter_point 8 */ 9 public interface State 10 { 11 /** 12 * 当前状态应该干嘛 13 * @param w 14 */ 15 public abstract void writeProgram(Work w); 16 }
1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:上午工作的状态 6 * 时间:2016年3月8日下午9:44:41 7 * 作者:cutter_point 8 */ 9 public class ForenoonState implements State 10 { 11 12 @Override 13 public void writeProgram(Work w) 14 { 15 if(w.getHour() < 12) 16 { 17 System.out.println("当前时间:" + w.getHour() + "点上午工作, 精神百倍"); 18 } 19 else 20 { 21 //设置下一个状态 22 w.setState(new NoonState()); 23 //工作内容 24 w.writeProgram(); //通过这个来调用当前的状态然后递归下去 25 } 26 } 27 28 }
1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:中午 6 * 时间:2016年3月8日下午9:52:25 7 * 作者:cutter_point 8 */ 9 public class NoonState implements State 10 { 11 12 @Override 13 public void writeProgram(Work w) 14 { 15 if(w.getHour() < 13) 16 { 17 System.out.println("当前时间:" + w.getHour() + "点, 饿了, 午饭;犯困,午休。"); 18 } 19 else 20 { 21 //设定下一个工作 22 w.setState(new AfternoonState()); 23 //开始工作状态 24 w.writeProgram(); 25 } 26 } 27 28 }
1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:下午工作 6 * 时间:2016年3月8日下午9:52:58 7 * 作者:cutter_point 8 */ 9 public class AfternoonState implements State 10 { 11 12 @Override 13 public void writeProgram(Work w) 14 { 15 if(w.getHour() < 17) 16 { 17 System.out.println("当前时间:" + w.getHour() + "点, 下午状态不错,加油努力"); 18 } 19 else 20 { 21 w.setState(new EveningState()); 22 w.writeProgram(); 23 } 24 } 25 26 }
1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:晚上加班 6 * 时间:2016年3月8日下午9:53:17 7 * 作者:cutter_point 8 */ 9 public class EveningState implements State 10 { 11 12 @Override 13 public void writeProgram(Work w) 14 { 15 if(w.isFinish()) 16 { 17 w.setState(new RestState()); 18 w.writeProgram(); 19 } 20 else 21 { 22 if(w.getHour() < 21) 23 { 24 System.out.println("当前时间:" + w.getHour() + "点,加班哦, 疲累之极"); 25 } 26 else 27 { 28 w.setState(new SleepingState()); 29 w.writeProgram(); 30 } 31 } 32 } 33 34 }
1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:睡眠状态 6 * 时间:2016年3月8日下午9:53:55 7 * 作者:cutter_point 8 */ 9 public class SleepingState implements State 10 { 11 12 @Override 13 public void writeProgram(Work w) 14 { 15 System.out.println("当前时间:" + w.getHour() + "点, 不行了,睡着了。"); 16 } 17 18 }
1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:下班休息状态 6 * 时间:2016年3月8日下午9:54:19 7 * 作者:cutter_point 8 */ 9 public class RestState implements State 10 { 11 12 @Override 13 public void writeProgram(Work w) 14 { 15 System.out.println("当前时间:" + w.getHour() + "点,下班啦,回家收衣服去啦"); 16 } 17 18 }
1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:工作事件 6 * 时间:2016年3月8日下午9:42:45 7 * 作者:cutter_point 8 */ 9 public class Work 10 { 11 /** 12 * 当前状态 13 */ 14 private State current; 15 16 /** 17 * 时间 18 */ 19 private double hour; 20 21 private boolean finish; 22 23 public boolean isFinish() 24 { 25 return finish; 26 } 27 28 public void setFinish(boolean finish) 29 { 30 this.finish = finish; 31 } 32 33 public Work(State s) 34 { 35 this.current = s; 36 } 37 38 public double getHour() 39 { 40 return hour; 41 } 42 43 public void setHour(double hour) 44 { 45 this.hour = hour; 46 } 47 48 public void setState(State current) 49 { 50 this.current = current; 51 } 52 53 public void writeProgram() 54 { 55 current.writeProgram(this); 56 } 57 58 }
1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:允许一个对象在其内部状态改变它的行为。对象看起来似乎修改了它的类 6 * 适用:一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为 7 * 一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。 8 * 通常,有多个操作包含这一相同的条件结构。State模式将每一个分支放入一个独立的类中。这使得你可以根据对象自身 9 * 的情况将对象的状态作为一个对象,这一对象,这一对象可以不依赖于其他对象而独立变化 10 * 时间:2016年3月8日下午8:26:26 11 * 作者:cutter_point 12 */ 13 public class Test 14 { 15 public static void main(String[] args) 16 { 17 Work work = new Work(new ForenoonState()); 18 work.setHour(9); 19 work.writeProgram(); 20 work.setHour(10); 21 work.writeProgram(); 22 work.setHour(12); 23 work.writeProgram(); 24 work.setHour(13); 25 work.writeProgram(); 26 work.setHour(14); 27 work.writeProgram(); 28 work.setHour(17); 29 work.writeProgram(); 30 31 //下班 32 //work.setFinish(true); 33 work.setFinish(false); 34 35 work.writeProgram(); 36 work.setHour(19); 37 work.writeProgram(); 38 work.setHour(22); 39 work.writeProgram(); 40 41 42 } 43 }
测试结果:
当前时间:9.0点上午工作, 精神百倍 当前时间:10.0点上午工作, 精神百倍 当前时间:12.0点, 饿了, 午饭;犯困,午休。 当前时间:13.0点, 下午状态不错,加油努力 当前时间:14.0点, 下午状态不错,加油努力 当前时间:17.0点,加班哦, 疲累之极 当前时间:17.0点,加班哦, 疲累之极 当前时间:19.0点,加班哦, 疲累之极 当前时间:22.0点, 不行了,睡着了。
标签:
原文地址:http://www.cnblogs.com/cutter-point/p/5256198.html