Posted on 2009-12-29 21:25
rikisand 阅读(494)
评论(0) 编辑 收藏 引用 所属分类:
工作记录~~everyday 、
Design Pattern
STATE 模式:
一个对象的行为取决于他的状态,而且它必须在运行时根据状态改变他的行为。常规实现中,一个操作含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常使用一个或者多个枚举常量表示。STate模式把这些状态时候的对象看做一个独立的对象,也就是将不同状态时的行为分散到相应的状态类中。要达到这样的效果,需要context,也就是状态的持有者,即原先的类;抽象状态类,他封装了与context交互的接口;具体状态类,也就是一个个的具体状态。context中保存一个抽象状态类对象为成员,并delegate对象行为给他,从而使相应状态下的行为代码生效。如果状态改变的准则不是固定的则state状态类同时应该重写changestate类以控制状态的改变,否则可以在context中实现。
具体到我们的项目:
每一个device即为context,他拥有一个state对象,device中的函数processMsg(){state->processMSg();} 由于状态改变的规则依赖于收到的消息,也就是说一个状态可能转换到多个状态device的每个状态需要重写statechange方法,stateChange(){state->stateChange(this,msg);} 这样,不同的状态下的行为实现在具体状态的类中,比原先的版本清晰明了,可读性更强。