状态之开关控制
public class Switch { public State State = new OffState(); public void On() { State.On(this); } public void Off() { State.Off(this); } } public abstract class State { public virtual void On(Switch sw) { Console.WriteLine("Light is already on."); } public virtual void Off(Switch sw) { Console.WriteLine("Light is already off."); } } public class OnState:State { public OnState() { Console.WriteLine("The Light turned on."); } public override void Off(Switch sw) { Console.WriteLine("The Light turned off..."); sw.State = new OffState(); } } public class OffState:State { public OffState() { Console.WriteLine("The Light turned off."); } public override void On(Switch sw) { Console.WriteLine("The Light turned on..."); sw.State = new OnState(); } } class Program { static void Main(string[] args) { var ls = new Switch(); ls.On(); ls.Off(); ls.Off(); } }