状态模式:当对象的状态转换条件过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类,可以把复杂的判断逻辑简化。
当一个对象的行为取决于它的状态,并且必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。
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 }