jether 发表于 2011-12-3 06:17:53

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

原文链接,如果不能访问,请大家自行加上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搜索,或者参考《重构:改善既有代码的设计》这本书。
页: [1]
查看完整版本: 把状态模式用于游戏角色状态