可以。我只是想提供一个用最少行数就可以实现的懒汉式单例模式
简单粗暴写法
class GameMangerClass {
}
export const GameSystem = new class GameMangerClass {
}
放在方法里面获取 ,是在调用的第一次才会初始化实例 对于没有用到的时候 占用内存会更小, 另外,游戏在启动时候会初始化,直接写的话,会被提前初始化,相当于和那些需要提前初始化的实例抢了CPU 和初始化的时间。
我基本上就不用单例,都是直接导入导出居多
也就是:
export class xxMgr{
func(){}
}
import xxMgr from xxMgr;
xxMgr.func();
我的xxMgr 都是全局的,本身就只有一个吧(单场景+多预制件开发的)?
class Singleton {
private static _ins: Singleton
private constructor() { }
static get Ins() { return this._ins ??= new Singleton()) }
}
这个代码是最最少的写法
明白了 现在是386时代,内存和CPU很重要 需要慎重使用!
怎么感觉有点阴阳怪气的
export的缺点: 很难保证初始化顺序,如果有人在构造函数里整花活,就是一场灾难
任何库的使用都是有条件的 ,要按要求去做,这个是你开发人员要提前明确的,
不要说你一个普普通通的开发人员,任何操作系统的API 你不管不吝的瞎记吧传参数 它也会出错崩溃,但你出错了 你不要说操作系统有问题,那不是人家有问题 那是你自己的问题,懂这个了逻辑了吗
说这话,我想你大概率没有参与过10人以上项目吧?
如果还这样坚持, 就当我没说,你开心就好
WINDOWS LINUX IOS的API的开发者都是多少人,要面对多少使用者?调用会出错吗?
import Singleton from “./Singleton”;
@Singleton
export class testModel {
declare static ins: testModel;
public log(arg: any) {
console.log(arg);
}
}
{
testModel.ins.log(1111);
}
让AI写个单例注解
我谢谢你啊
很好的反面案例,楼上说的 “很难保证初始化顺序,如果有人在构造函数里整花活,就是一场灾难” 知道了吧
你看看你 这不整花活了 
这里的人说话真好听
export default new class { }
单例是做游戏开发,滥用最多的设计模式,其次是观察者模式;用起来的时候舒服,以后遇到的坑就知道了
这个写法的问题是,允许使用者手贱去清空单例,而且清空了就没了。又因为你没有申明构造函数的访问域,所以也可以自己去创建单例的实例。这导致了你这个单例并不安全,而且只是一个有这么个“单例”实例的类,本质上我在外面些一个[new A(), newA[], new A[]]的数组都行。
所以好的单例写法最重要的两点就是,构造函数必须是private的,instance的获取只能通过getter去拿。