整个四月都在回炉重造之前的英雄成长系统,就因为决定换一个方向,累死。回头看看去年,没想到也是 4 月 30 号写的博客。。。

重造的过程里,同时在看《head first 设计模式》这本书。作者加了很多有趣的插图进去,以前是很讨厌这么做作的书,但是现在读来觉得没那么累,挺好的,可能是老了吧。。。里面提到的开放 - 封闭原则很有启发意义。以前写代码,写的很老实,不够偷懒,总是一字一句把策划的文案搬进去,抽象层次不够,搞的人很累。开放 - 封闭原则就教导,写代码应该对扩展开放,以后策划有新需求,只要在少数几处地方加个入口就行。对修改封闭这个倒是没有想好,策划总是在改案子,而且很多时候改动的幅度很大,怎么实现不修改没想好。目前是抽取了一堆工具函数出来,将策划的需求拼凑成一张表格,然后逐项检查,有新需求加新工具函数。

《head first 设计模式》里还提到了对象工厂和观察者模式。观察者模式用的还是蛮多的,玩家身上会挂一个类似公告板的东西,让各种玩法在上面注册主题。比如玩家升级,充值 VIP,发起一次战斗,战斗胜利,完成造兵等等,然后其他新玩法和成就系统就可以监听这些消息了。日常任务、成就系统前后做了两版,具体玩法的代码都不需要修改,这个观察者模式挺好用的。

对象工厂在程序群里其实还被喷过几次,我以前也觉得很多余,尤其是对于 Lua 这种动态语言来说。没有编译期进行检查,调用接口的代码不跑到就不知道接口对不对。不用工厂,多 require 几个文件,自己调一下 new,没什么区别。现在觉得,抽象一个对象工厂出来,更多是一种减轻心理负担的做法吧。如果一个玩法的文件,里面密密麻麻的 require 了一堆外部文件,看起来就有点头皮发麻了。现在搞一个 100 行左右的工厂,将需要的类都放进来,增加创建方法,那么相关玩法的头部就可以简化了。