码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式6-状态模式

时间:2016-05-28 12:50:41      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

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

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

技术分享

 

技术分享
 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

 

设计模式6-状态模式

标签:

原文地址:http://www.cnblogs.com/liurui/p/5536678.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!