zoukankan      html  css  js  c++  java
  • 【设计模式】20、状态模式

     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点, 不行了,睡着了。
    

      

  • 相关阅读:
    HDU Number Sequence
    HDU Wolf and Rabbit
    HDU Fire Net
    C# QQ weather
    Jquery 随窗口改变大小不会影响浏览位置,DIV可以在绝对的位置不变.菜单相对位置不变
    C# 验证中国电话号码,电子邮件,网址,身份证号码等等
    C# Image Download
    Csharp 两个DataTable或DataView互换,可以用来加密解密
    C# Windows Forms TreeView SelectedNode(VS2008)
    C# 获取源代码
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5256198.html
Copyright © 2011-2022 走看看