找回密码
 立即注册
楼主: 胡37

Unity里滥用单例模式有弊端吗?

[复制链接]
发表于 2021-2-23 16:05 | 显示全部楼层
看项目大小,小项目问题不大,大项目问题不小
发表于 2021-2-23 16:15 | 显示全部楼层
单例对于访问外部非静态方法非常有用,通常一类功能统一又不经常变化的功能经常设计为单例,因此单例是有其适用场景的。单例滥用造成的问题有:
1. 维护成本
        不是所有类随便就写作单例,所以项目一大就会选用一些框架以更好的组织代码,作为程序员不能仅以实现功能为目的,写完的代码还需要维护,自己写的代码自己都会忘更何况去维护别人的代码,而维护别人的代码有时又不可避免。不合适的类作为单例若经常功能发生改变,比如修改参数个数或类型、删除某个方法、功能相近的两个单例合并,则要修改用到的很多地方。合适的做法是不面向类实例编程,功能都封装在类内部能不对外就不对外。
2. 资源无法释放
        单例的实例不自实现销毁操作时,其本身会一直处于活跃状态,多了自然就会有更多的资源无法合适的释放
发表于 2021-2-23 16:17 | 显示全部楼层
写了ABCD脚本,里面变量相互引用是大多数用Unity新手常见的思路和错误,你能想到用单例模式解决说明你还是思考了的,但是像很多回答的一样,单例有他的适用范围,比如管理Manager类等,不可以乱使用,特别是对游戏逻辑层。但是怎么解决呢,建议你多看一下别的设计模式,增加一些中间桥接层,比如使用MVC模式,A模块访问B模块只可以访问B模块的数据层,而所有游戏逻辑模块的数据层又由一个全局的Manager类进行管理。
发表于 2021-2-23 16:24 | 显示全部楼层
看你的描述我觉得你的问题不在于在unity中滥用单例 而在于过度依赖mono那些东西 既然要考虑这种架构的问题就一定要脱离unity编程 那也就不会出现大量start什么的
发表于 2021-2-23 16:28 | 显示全部楼层
和用全局变量的利弊相似。
发表于 2021-2-23 16:29 | 显示全部楼层
单列滥用说明资源管理混乱
发表于 2021-2-23 16:34 | 显示全部楼层
如果是继承了 MonoBehaviour的,销毁请注意内存泄露,被单例引用的,引用类型变量要置Null
一定要上真机查内存泄漏。
内存泄漏排查工具 推荐UWA GOT
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 17:36 , Processed in 0.064809 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表