把状态模式用于游戏角色状态 

2011-12-03 06:17 发布

3695 0 0
原文链接,如果不能访问,请大家自行加上www:

smartoys.org/2011/11/29/把状态模式用于游戏角色状态/


在原先的Role类中新建一个IState类型字段iState,把case StateEnum.State1:中的代码改为iState = new State1();iState.StateUpdate();,这时再把iState.StateUpdate();移出switch结构,放到Switch(bool)方法最下边,也就是位置2,或者位置1也行。而对于case StateEnum.State2:这样的情况,可以给State2的构造方法增加一个参数,就可以了。
这时发现new状态的操作太多了,可以给这些状态类来个单例,单例模式很简单的,这里就不说了。至于State2,就要特殊情况特殊处理,可以在单例静态方法里根据一个静态字段进行判断,这个静态字段就是这个类里保存的f3,保存了上次产生的实例的参数,或者根据实际情况,也可以来个哈希表记录这个参数和对象实例的对应关系。或者也可以把IState接口换成一个抽象类,然后在其中写一个静态工厂函数,这个工厂函数的参数就是游戏角色的状态类型,这就用到了Replace Constructor with Factory Method(以工厂函数取代构造函数),这时State2的f3参数也可以放在这个抽象的基类里边,这些都看情况而定。
有关重构的内容,大家可以Google搜索,或者参考《重构:改善既有代码的设计》这本书。

TA的作品 TA的主页
B Color Smilies

你可能喜欢

把状态模式用于游戏角色状态 
联系
我们
快速回复 返回顶部 返回列表