设计模式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
原文地址:https://www.cnblogs.com/liurui/p/5536678.html