设计模式之State

在某些情况下,我们会使用大量分支。switch。

目的是为了保证状态变更。在我们使用switch的同时,我们需要维护一个动作的宏,或者列表,然后每个分支大部分都类似。如果两三个都放到一起,显不出什么影响。当状态变的复杂的时候,我们就开始,不断想办法,设置bool,来判断什么时候该换状态之类的。

这个时候最好的选择就是使用State模式。其实它不过是把每个分支都放到独立的类里面了。主要的参数,都由调用的context提供。

好处有一下几点。
1.删除和添加动作,不会影响主要的类。也明显可以感觉到实际类的代码变小。肯定要增加很多的类。
2.各个状态,会由相关调用直接约束。只要设置状态,调用就行了,每个状态自己处理,相关是否变换的动作。
3结构变清晰。让维护变得更轻松。不用在看大量代码,然后不断查找相关引用的影响之类的。

UML状态图,更多的就是表现的这个模式吧。

主要用途:
1.比如QQ的上线,隐身,吃饭等状态,如果比较少,其实可能不用影响也不大
2.MSAgent的各种表情,以及QQPET的各个活动
3.各类游戏的动作,都应该会分解成每个状态吧,因为每个状态,贴图会不一样。
4.TCP等连接变化
5.用户登陆注册
6.用户级别和银行VIP等涉及到级别的地方

我就想到这么多。在自己的RobotToy上,使用了这个模式,感觉好多了。结构清晰,使用方便。

其实使用模式,你会发现,代码变化不小,其实稍微修改,就成为了某个模式。使用了模式之后,代码变得好维护多了。

至少一个类里面参数过多,每个人都会觉得比较难找,不知道其中如何相应的,需要更多时间去了解。就算自己写的代码,一点CDialog里面代码超过1K行,你肯定也会觉得比较难以忍受。不过,唯一可以解决这一切的方法就是重构和模式的引入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值