【设计模式学习笔记】状态模式

来源:互联网 发布:超级玛丽安卓源码 编辑:程序博客网 时间:2024/05/22 07:42

定义

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

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

UML

这里写图片描述

实现

    abstract class State    {        public abstract void Handle(Context context);    }    //具体状态类,每一个子类实现一个与Context的一个状态相关的行为    class ConcreteStateA:State    {        public override void Handle(Context context)        {            context.State = new ConcreteStateB();   //状态转换,即A的下一状态为B        }    }    class ConcreteStateB : State    {        public override void Handle(Context context)        {            context.State = new ConcreteStateA();   //状态转换,即B的下一状态为A        }    }    //Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态    class Context    {        private State state;        //定义Context的初始状态        public Context(State state)        {            this.state = state;        }        //可读写的状态属性,用于读取当前状态和设置新状态        public State State {            get { return state; }            set {                state = value;                Console.WriteLine("current state:" + state.GetType().Name);            }        }        //对请求做处理,并设置下一状态        public void Request()        {            state.Handle(this);        }    }    //客户端    static void Main(string[] args) {            Context c = new Context(new ConcreteStateA());            //不断的请求,同时更改状态            c.Request();            c.Request();            c.Request();            Console.Read();        }

输出

current state:ConcreteStateB
current state:ConcreteStateA
current state:ConcreteStateB

总结

  1. 状态模式的好处

    状态模式的好处是将于特定状态相关的行为局部化,并且讲不同状态的行为分割开来[DP]
    将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的状态都存在于某个ConcreteState中,所以通过定义新的子类可以很容易地增加新的状态和转换。[DP]

  2. 什么时候考虑使用状态模式?

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

  3. 在Unity中的应用
    http://blog.csdn.net/poem_qianmo/article/details/52824776

参考文献

[1] 大话设计模式

阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 套打是什么意思 蓝牙耳机套料 低烟无卤护套料 电缆护套料 低烟无卤阻燃护套料 鞋套机 镜头套机 鞋套机厂家 手套机吧 套机 钢丝绳插套机 佳能600d套机报价 套机是什么意思 佳能600d套机 一次性鞋套机 鞋套机哪个牌子好 全自动鞋套机鞋套 尼康单反套机 防静电鞋套机 佳能550d套机报价 套机和单机的区别 佳能70d18200套机报价 把套 套的 套了 保温杯布套 保温杯杯套 旅行杯套 一表人才两套西装三杯酒量 膳魔师杯套 奶茶杯套 怎样钩杯套 杯套的钩法花型图片 咖啡杯套 儿童保温杯杯套 编织杯套 如何钩杯套 套杯 旅行套杯 特百惠杯套 咖啡套杯