【步兵 经验篇】工厂模式 in Game

【步兵 经验篇】工厂模式 in Game by EOS.

最近在看《Effective Java中文版 第2版》,密码 968n,虽然是java的,
但是讲的很有深度,是不错的一本书,而且语言直接是都是相通的。
可以看一下java基础,写点小demo熟悉一下,然后再看看此书。

说了辣么多,然而还是用lua讲=、=,脚本写起来就是方便


举个栗子

GameElement = {
    Player  = 1,    --玩家
    Monster = 2,    --怪
    NPC     = 3,    --NPC
    Text    = 4,    --伤害、暴击等
    Effect  = 5,    --特效
    Collect = 6,    --采集物
    Drop    = 7,    --掉落物品
    Shadow  = 8,    --阴影(可单独拿出来做优化)

    --当然也可以直接用属性字典{type, id, model, name, ...}
    new = function(elementType, id) 
        local ret = GameElement.get(elementType, id)
        if ret then return ret end

        if elementType == GameElement.Player then
            ret = PlayerElement.new(id)
        elseif elementType == GameElement.Monster then
            ret = MonsterElement.new(id)
        --其他省略  
        end
        --根据不同类型放入不同的表,例如
        --ElementMgr[GameElement.Player] = {} 
        Mgr.ElementMgr.addElemet(ret.getType(), ret)
        return ret
    end,

    get = function(elementType, id)
        return Mgr.ElementMgr.getElemet(elementType, id)
    end,

    kill = function(elementType, id)
        --清除指定类型,指定id
    end,

    killById = function(id)
        --清除所有类型,指定id
    end,

    clearByType = function(elementType)
        --清除指定类型,全部id  
    end,
    ------------以上三个方法可以统一调用 Element:killed()--------------
}


local player = GameElement.new(GameElement.Player, serverId)
--player:该干啥干啥

local oldPlayer = GameElement.get(GameElement.Player, serverId)

像这样 通过统一接口,来生成不同的数据,而且隐藏了内部的函数复杂的逻辑,
降低了耦合,让代码看上去更加 统一和简介,而且也方便管理。


代码管理

这里说的不是代码的版本控制,而是单单只代码或者说代码逻辑的管理。
(ps:我的项目是用svn+云盘来管理的,git什么好麻烦,还是svn人性化)

写代码写的越久,就会越发现,对代码的掌控力很重要,能够快速的定位到代码,
而且直观的管理数据,对项目而言,可能比运行效率更加重要。
当然这样对开发的效率和代码的维护都是有意的。

(ps:当然代码写太烂的,该练还是要练,不要害怕重构。一时费事,可能受益良久,
比如戳中了你的某根弦,刷的一下就觉得写代码信手拈来=、=)


结语

想提过代码水平,代码量是必不可少的,包括写和读。
看别人的代码,学的是最快的,但是不写过是不会发现什么缺陷,
或者是不清楚在什么地方用什么样的方式,来管理代码。

比如最近的项目,事件驱动虽然是不错的方式,但是什么东西都用事件来写,
就感觉整个逻辑变成了蜘蛛网,纵横交错。(恶心干呕,这是慢性咽炎的症状)

比如ui。直接UIMgr:show、hide、close之类来控制界面不就好了么,
非要,注册个Listener,来监听OpenXXLayer事件,然后这fire一下,
那fire一下,然后那么多界面在一起就是 fire fire fire ,突突突~啊~ 突突突~
this is a war (捂脸 流泪.gif)

希望大家能写多看代码,多多交流,不要在摸黑的路上越走越远~
可以加群交流,群号左上角~

See Again~
之前
真爱无价,欢迎打赏~
赞赏码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值