今天周末,在家无事可做,不知道为什么,突发奇想,想写一个RPG游戏的demo玩玩.所以就记录一下. 第一步要做的是,为以后的角色类写一个state模式的类,考虑到可能以后会用到,所以用模版来实现, //状态枚举 enum _EN_STATE_TYPE { EN_STATE_STANBY, EN_STATE_MOVE, EN_STATE_ATK, EN_STATE_DEAD }; //状态父类 template < class T > class state_object { protected…
状态模式其意图是在一个对象的状态发生变化时能够同时改变它的行为.一个生活中比较常见的例子就如你(是指你自己本人)在走时时,整个人全身的动作是双手臂前后慢慢摇摆且双脚也是一步一步慢慢往前移的,即:该走路状态下,你所对应的是走路动作:在跑步时,你的双手双脚动作明显频率.步伐都加快,即:在跑步状态下,你所对应的是跑步动作:........:在睡着时,你的全身都是不动的,即:睡着状态下,你是处于睡觉的动作状态.在实际项目开发中,(该模式)最常见的框架设计便是FSM了.模式的类关系结构图参考如下: 编码结…
State??? State模式中,我们用类来表示状态.以类来表示状态后,我们就能通过切换类来方便地改变对象的状态.当需要增加新的状态时,如何修改代码这个问题也会很明确. 直接用状态代替硬编码 依赖于状态的处理,来执行具体的操作 理清职责 实现功能: ·有一个金库 ·金库与警报中心相连 ·金库里有警铃和正常通话用的电话·金库里有时钟,监视着现在的时间 ·白天的时间范围是9:00~16:59,晚上的时间范围是17:00~23:59和0:00~8:59 ·金库只能在白天使用 ·白天使用金库的话,会在…
目录 State模式 示例程序 实现的功能 不使用&使用状态模式对比 示例程序的类图 代码 角色和类图 角色 类图 拓展思路 分而治之 依赖于状态的处理 谁来管理状态迁移 易于增加新状态 实例的多面性 State模式 State模式即状态模式,用类表示状态,通过切换类来方便地改变对象的状态. 示例程序 实现的功能 有一个金库和一个警报系统,金库里面有三个装置,根据时间变化,触发它们会产生不同的动作. 时间范围 白天:早上9点到下午5点 晚上:下午5点到第二天上午9点 三个装置 使用金库按钮:在白…
如果状态在运行过程中,不停的切换和改变,我们怎么办? 状态的迁移是我们生活和工程中非常普遍的一个概念.于是在数学上有一种理论来分析和解决这个问题. 有限状态机理论是一个非常成熟的理论,所有动作和流程的迁移可以归结为状态的迁移. 这个理论的前提是: 状态的数目是确定的,或者说是有限的. 状态的迁移方向是固定的,也就是有向的. 状态存储关于过去的信息,就是说:它反映从系统开始到现在时刻的输入变化.转移指示状态变更,并且用必须满足来确使转移发生的条件来描述它.动作是在给定时刻要进行的活动的描述.有多种…
State模式在对象内部状态发生变化的时候,改变自身的行为,这通常是通过切换内部状态对象实现的,对象将自身在各个状态的行为推给了状态对象,从而解开了行为与对象的依赖. 场景描述 在经典的订单处理场景中,订单其不同状态的时候变现了不同的行为,具体内容如下: 假如订单是一个新创建的订单,那么它可以被寄送,也可以被取消: 假如订单已经被寄送,那么它不可以被再次寄送,也不可以被取消: 假如订单已经被取消,那么它不可以被寄送,也不可以被取消. 上述内容中详细解释了订单状态和对应行为的关系. 遇到问题 对逻…
地铁十字转门 状态迁移表格. 起始状态 触发迁移的事件 终止状态  要执行的动作. Locked   Coin               UnLocked UnLock UnLocked Pass             Locked     Lock 最直接的方式:switch(state)  case Locked : switch(event) case Pass: State模式 State/Strategy模式 都有一个Context,其委托给一个具有几个派生类的多态基类. 不同:S…
1.意向 同意一个目标,然后改变其内部状态,改变它的行为. 对象似乎改变它的类别. 2.别名 状态对象(Objects for States) 3.动机 考虑一个表示网络连接的类TCPConnection.一个TCPConnection对象的状态处于若干不同状态之中的一个:连接已建立(Established).正在监听(Listenling).连接已关闭(Closed).当一个TCPConnection对象收到其它对象的请求时.它依据自身的当前状态做出不同的反应.比如,一个Open请求的结果依赖…
State模式中我们将状态逻辑和动作实现进行分离.允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类:在一个状态即将结束的时候启用下一个状态. /////////state.h///////////////////////////////////////////////////////////////// #pragma once class Context ; class State { public: virtual ~State(); State(); ; ; prot…
state模式应用场景 条件判断很多的情况 比如有很多if else语句:switch case语句等等. 如果以后业务越来越复杂,条件判断有100多个,每种条件的处理逻辑很复杂,不止一个业务逻辑会重复用到之前条件的处理逻辑. 参考文档如下: http://blog.csdn.net/feiyinzilgd/article/details/6302717 http://www.jdon.com/designpatterns/designpattern_State.htm http://blog.…