1. // 抽象状态,每种状态对应一种行为
    2. public abstract class State {
    3. public abstract void WriteProgram(Work w);
    4. }
    5. // 上午工作状态
    6. public class ForenonState extends State {
    7. @Override
    8. public void WriteProgram(Work w) {
    9. if(w.Hour<12){
    10. System.out.println("当前时间:"+w.Hour+",上午工作,精神百倍");
    11. }else{
    12. // 超过12点,则转入中午工作状态
    13. w.SetState(new NoonState());
    14. w.WriteProgram();
    15. }
    16. }
    17. }
    18. // 下午工作状态
    19. public class AfternoonState extends State {
    20. @Override
    21. public void WriteProgram(Work w) {
    22. if(w.Hour<18){
    23. System.out.println("当前时间:"+w.Hour+",下午工作状态还不错,继续努力");
    24. }else{
    25. // 超过18点,则转入晚间工作状态
    26. w.SetState(new EveningState());
    27. w.WriteProgram();
    28. }
    29. }
    30. }
    31. // 晚间工作状态
    32. public class EveningState extends State {
    33. @Override
    34. public void WriteProgram(Work w) {
    35. if(w.TaskFinished){
    36. w.SetState(new RestStae());
    37. w.WriteProgram();
    38. }else{
    39. if(w.Hour<=22){
    40. System.out.println("当前时间:"+w.Hour+",加班哦,疲惫至极");
    41. }else{
    42. // 超过21点,则转入睡眠状态
    43. w.SetState(new SleepingState());
    44. w.WriteProgram();
    45. }
    46. }
    47. }
    48. }
    49. // 下班休息状态
    50. public class RestStae extends State {
    51. @Override
    52. public void WriteProgram(Work w) {
    53. System.out.println("当前时间:"+w.Hour+",下班了回家了");
    54. }
    55. }
    56. // 睡眠状态
    57. public class SleepingState extends State {
    58. @Override
    59. public void WriteProgram(Work w) {
    60. System.out.println("当前时间:"+w.Hour+",不行了,睡着了");
    61. }
    62. }
    63. // 工作,定义当前状态
    64. public class Work {
    65. private State currentState;
    66. public Work(){
    67. currentState = new ForenonState();
    68. }
    69. public int Hour;
    70. public boolean TaskFinished;
    71. public void SetState(State state){
    72. currentState=state;
    73. }
    74. public void WriteProgram(){
    75. // 设置状态,判断状态是否和当前一致,是否能处理,不是再下一个
    76. currentState.WriteProgram(this);
    77. }
    78. }
    79. public class Test {
    80. public static void main(String[] args) {
    81. Work work =new Work();
    82. work.Hour=9;
    83. work.WriteProgram();
    84. work.Hour=13;
    85. work.WriteProgram();
    86. work.Hour=14;
    87. work.WriteProgram();
    88. work.Hour=20;
    89. work.WriteProgram();
    90. // work.TaskFinished=true;
    91. work.Hour=23;
    92. work.WriteProgram();
    93. }
    94. }