状态模式

来源:互联网 发布:程序员表白代码 编辑:程序博客网 时间:2024/05/18 10:54

MartinFlower曾在《重构》中写到:一个很重要的代码坏味道叫做Long method,代码过长说明责任过大,很糟糕。

面向对象设计其实就是希望做到代码的责任分解。

状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。

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

 

    class Program    {        static void Main(string[] args)        {            Context c = new Context(new ConcreteStateA());            c.Request();            c.Request();            c.Request();            c.Request();            Console.Read();        }    }    class Context    {        private State state;        public Context(State state)        {            this.state = state;        }        public State State        {            get            {                return state;            }            set            {                state = value;                Console.WriteLine("当前状态:" + state.GetType().Name);            }        }        public void Request()        {            state.Handle(this);        }    }    abstract class State    {        public abstract void Handle(Context context);    }    class ConcreteStateA : State    {        public override void Handle(Context context)        {            context.State = new ConcreteStateB();        }    }    class ConcreteStateB : State    {        public override void Handle(Context context)        {            context.State = new ConcreteStateA();        }    }


 

0 0