[muzzik教程]:导出式单例和函数式单例的区别

大家或多或少都用过单例模式,那么我就在这里和大家说说这两种单例的区别:

导出式单例: 例如: export default new A; //A 是一个类
这种单例很方便, 但也是因为方便,这个导出的单例在我们 导入时就已经创建好了对象,如果一直使用这种单例方式那么随着我们脚本越来越多,你会发现启动速度越来越慢。特别是在construct里面初始化资源或者计算的一些类,会严重拖慢启动速度。。

函数式单例: 这个才是正确的使用方式,在第一次获取时创建,构造也能分开进行。可以减少程序启动的时间。其实这个单例什么都好,就是写多了单例类之后你就会发现。每次都要添加重复的函数和实例变量。还占用了一些代码空间。这让强迫症患者有点难受。
之前在公司看到过一个单例方法:用一个键为类名,值为实例对象的Map来存取变量,就不用每个类写重复的代码了,但是这样对于类名重复的类还是有问题。那么有没有什么好办法既可以在第一次获取时才创建对象又避免copy很多重复代码呢?请看下面大哥示例。

4赞

4赞

可以,学习了:+1:,之前也想过继承,忘了可以new this

感谢 很有帮助

感谢 很有帮助

构造是public, 这是死穴啊~

1赞

同意你的观点,构造已经是public,其他人随便new,还单例个毛线。

因为无法继承构造是 private 的类,而且如果我需要一个有全局单例的类也能实例化,那么无法实现,例如日志类,需要全局的默认实例以及模块自己实例化的需要

大佬,看你代码很舒服,使用的字体是啥,很喜欢,在线等!

模块化编程,做成这样吧