TS函数式单例模式

type ctor<T = {}> = new(…args:any[]) => T
export function Singleton(Base:TBase){
return class extends Base{
private static _inst:any;

    static get inst(){
        if(!this._inst){
            this._inst = new this();
        }
        return this._inst
    }
}

}

使用方式如下:
class AudioMgr extends Singleton(class {}) {
public foo(){
console.log(‘foo called’);
}
}
export default AudioMgr.inst as AudioMgr //禁止外部使用new进行构造。
AudioMgr.foo()

  1. 使用 TypeScript 的 Mixin 模式实现通用单例

  2. 通过构造类型约束保证类型安全

  3. 每个派生类各自维护独立单例实例

  4. 本实现中“不可构造性”并不依赖 constructor 访问控制,而是通过模块只导出实例、隐藏类构造器的方式,在类型层面彻底禁止外部 new

我现在个人不喜欢这样写了,调用太啰嗦了,如果不需要懒汉模式,可以直接这么写:

export class XXX{
}
export const xxx=new XXX()
这样调用最简洁,直接xxx就能访问

如果函数全程无副作用,其实可以连class都不需要
直接export 各种功能function。这样是更符合esm推荐的写法

2赞

简单的事情复杂化,才能体现主角的能力,而且他们都认为看过很多关于设计模式的书籍,那书厚的讲的那叫一个细啊,不多写点怎么体现自己的价值呢?你两三行就给实现了 他们会挑你很多毛病的 这没考虑全那没考虑全的,一个细节就能挫败你

1赞

你写的那么简单, 怎么让别人找毛病, 你要知道你是在中国, 江湖不是简简单单, 江湖是人情世故,什么样的下属能让领导喜欢, 能让领导找毛病的下属才叫好下属,下课

1赞

我还以为我菜呢,我都是这么写,简单易维护,如果各自想维护自身的比如对象池,更方便灵活好用。

1赞

别的不说, 就说这几天有个计算机考试的那个, 你说是不是一样的道理

“keep it simple”

1赞

考试那个我中招了, 最后看到评论区,才明白大佬都在评论区