using System; using System.Collections.Generic; using System.Text; ///State(状态)模式用于把一个对象的内部状态从对象中分离出来,形成单独的状态对象,所有与该状态相关的行为都放入该状态对象中。 ///add by jzh 2007-04-15 namespace DesignPattern { abstract class State { protected string strStatename; abstract public void Pour(); } class OpenedState : State { public OpenedState() { strStatename = "打开"; } override public void Pour() { Console.WriteLine("...pouring..."); Console.WriteLine("...pouring..."); Console.WriteLine("...pouring..."); } } class ClosedState : State { public ClosedState() { strStatename = "关闭"; } override public void Pour() { Console.WriteLine("关闭"); } } class ContextColaBottle { public enum BottleStateSetting { Closed, Opened }; OpenedState openedState = new OpenedState(); ClosedState closedState = new ClosedState(); public ContextColaBottle() { CurrentState = closedState; } private State CurrentState; public void SetState(BottleStateSetting newState) { if (newState == BottleStateSetting.Closed) { CurrentState = closedState; } else { CurrentState = openedState; } } public void Pour() { CurrentState.Pour(); } } public class Client { public static void Main(string[] args) { ContextColaBottle contextColaBottle = new ContextColaBottle(); Console.WriteLine("释放"); contextColaBottle.Pour(); Console.WriteLine("打开"); contextColaBottle.SetState(ContextColaBottle.BottleStateSetting.Opened); Console.WriteLine("释放"); contextColaBottle.Pour(); Console.ReadLine(); } } }