zoukankan      html  css  js  c++  java
  • 设计模式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
  • 相关阅读:
    zkw费用流
    luogu5212/bzoj2555 substring(后缀自动机+动态树)
    后缀数据结构模板2
    后缀数据结构模板1
    通用动态树(Link-Cut Tree)模板
    上下界网络流总结
    多项式多点求值
    拉格朗日反演
    多项式板子·新
    luogu2387 [NOI2014]魔法森林
  • 原文地址:https://www.cnblogs.com/liurui/p/5536678.html
Copyright © 2011-2022 走看看