• 设计模式6-状态模式


    状态模式:当对象的状态转换条件过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类,可以把复杂的判断逻辑简化。

    当一个对象的行为取决于它的状态,并且必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。

     1 namespace DesignModel.状态模式
     2 {
     3     class Work
     4     {
     5         private State curSta;
     6         public Work()
     7         {
     8             curSta = null;
     9         }
    10           
    11         public int Hour { get; set; }
    12 
    13         public void SetState(State sta) {
    14             curSta = sta;
    15         }
    16         
    17         public void WriteProgram()
    18         {
    19             curSta.DoWork(this);
    20         }
    21 
    22     }
    23     abstract class State
    24     {
    25         public  abstract void DoWork(Work w);
    26     }
    27     class NoonState : State
    28     {
    29         public override void DoWork(Work w)
    30         {
    31             if (w.Hour < 13)
    32                 Console.WriteLine("");
    33             else {
    34                 w.SetState(new AfternoonState());
    35                 w.WriteProgram();
    36 
    37             }
    38         }
    39     }
    40     class AfternoonState : State
    41     {
    42         public override void DoWork(Work w)
    43         {
    44             if (w.Hour < 23)
    45                 Console.WriteLine("");
    46         }
    47     }
    48 }
    49 
    50   /// <summary>
    51         /// 主类引用状态类的抽象,具体状态类实现判断逻辑
    52         /// </summary>
    53         static void 状态模式()
    54         {
    55             var w = new Work();
    56             w.Hour = 9;
    57             w.SetState(new NoonState());
    58             w.WriteProgram();
    59             w.Hour = 14;
    60             w.SetState(new AfternoonState());
    61             w.WriteProgram();
    62             ///...
    63         }
    View Code
  • 相关阅读:
    等值首尾和2012年12月27日
    求质数2012年12月29日
    动态规划之最长公共子序列2012年12月22日,23日
    两数组最短距离2012年12月26日
    支配值数目2012年12月25日
    等值数目2012年12月26日
    最长平台问题(递归算法)2012年12月25日
    最长平台问题2012年12月24日
    筛法求质数2012年12月30日
    线性筛法2013年1月2日
  • 原文地址:https://www.cnblogs.com/liurui/p/5536678.html
Copyright © 2020-2023  润新知