前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式在游戏开发中的应用之单例模式

设计模式在游戏开发中的应用之单例模式

作者头像
用户1428723
发布2020-08-06 15:25:29
8740
发布2020-08-06 15:25:29
举报
文章被收录于专栏:代码与画家代码与画家

单例模式

1.通俗的定义

是指在运行中只有一个实例对象存在。

2.结构图如下(图片来源与网络)

3.游戏开发中的使用

游戏开发中单例模式的使用也是非常普遍的,比如在Cocos2d-x中的Director就是一个单例。比如游戏中的很多工具类都是做成单例或者静态类的方式来使用。

单例还有一种写法,很少有人使用,然而这种写法在做游戏开发时却很好用。比如,我们在需要分享时,往往都需要每个平台都有单独的功能和实现方式,很多时候我们都这么写:

然后再根据不同平台调用不同的函数。其实我们完全可以写的再优雅一些:

其实这里我们更重要的是要讨论一下单例模式的问题。

4.单例模式的问题

最大问题之一就是它本身是一个全局变量。全局变量会让人很难阅读和理解,当我们去查找一个别人写的代码中的bug时,如果这里没有使用全局变量的话,我们只要理解这个函数体内的代码和传递的参数就可以了。然而当这里充斥着全局变量的时候,性质就不一样了,你要全局搜索这个全局变量都在哪里引用了,做了什么修改,为什么这么修改,理解和修改的代价就会变得特别大。同时全局变量还增加了代码的耦合性,这也是个问题。

在很多项目中我们都能看见这样的类:SoundManager,GameManager,DataUtils等等,各种各样的Manager和Utils,大多数时候它们很管用,但是当你要创建这么一个类的时候,你应该思考一下真的需要一个单例的类么?在《游戏编程模式》中有下面这个例子:

这里的BulletManager就是一个管理Bullet的单例类,看起来这里很合理,但是真的需要吗?答案是不需要:

总之,单例是很方便,有时也很管用,但是要慎用,如果项目中充斥着大量的单例,那么这个项目肯定是难以维护的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码与画家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档