当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类中。 #region 状态模式 abstract class State { public abstract void DoSomething(WorkLife wl); } class SleepState : State { public override void DoSomething(WorkLife wl) { if (wl.Hour <9) { Console.WriteLine("现在才" + wl.Hour + "点,继续睡觉"); } else { wl.SetState(new WorkState()); wl.DoSomething(); } } } class WorkState:State { public override void DoSomething(WorkLife wl) { if (wl.Hour >= 9 && wl.Hour <= 18) { Console.WriteLine("现在是" + wl.Hour + "点,哥哥正在上班"); } else { wl.SetState(new RestState()); wl.DoSomething(); } } } class RestState : State { public override void DoSomething(WorkLife wl) { if (wl.Hour >= 18 && wl.Hour <=23) { Console.WriteLine("现在是" + wl.Hour + "点,哥哥下班休息中"); } else { wl.SetState(new GotoBedState()); wl.DoSomething(); } } } class GotoBedState : State { public override void DoSomething(WorkLife wl) { Console.WriteLine("现在是" + wl.Hour + "点,时间不早了,哥哥去觉觉了"); } } class WorkLife { private State current; public WorkLife() { current = new SleepState(); } private double hour; public double Hour { set { hour = value; } get { return hour; } } public void SetState(State s) { current=s; } public void DoSomething() { current.DoSomething(this); } } #endregion class Program { static void Main(string[] args) { Console.WriteLine("状态模式效果演示:"); WorkLife wl = new WorkLife(); wl.Hour = 1; wl.DoSomething(); wl.Hour = 8; wl.DoSomething(); wl.Hour = 10; wl.DoSomething(); wl.Hour = 19; wl.DoSomething(); wl.Hour = 24; wl.DoSomething(); } }