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 /
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點, 不行了,睡著了。