18 lines
454 B
TypeScript
18 lines
454 B
TypeScript
/** 单例模式
|
|
* 确保一个类只有一个实例,并提供一个全局访问点
|
|
* @param constructor
|
|
* @constructor
|
|
*/
|
|
export function Singleton<T extends { new (...args: any[]): any }>(constructor: T): T {
|
|
let instance: any;
|
|
|
|
return new Proxy(constructor, {
|
|
construct(target, argsList, newTarget) {
|
|
if (!instance) {
|
|
instance = Reflect.construct(target, argsList, newTarget);
|
|
}
|
|
return instance;
|
|
},
|
|
});
|
|
}
|