单例模式
js
export class Request {
static instance;
constructor() {
this.cache = {};
}
// 获取全局唯一实例
static getInstance() {
if (this.instance) {
return this.instance;
}
this.instance = new Request();
return this.instance;
}
async request(url) {
// 发送请求
}
}
const request = Request.getInstance();
await request.request("/api/1");
代理实现
ts
export function singleton<T extends new (...args: any[]) => any>(classname: T): T {
let instance: InstanceType<T>;
const singletonClass = new Proxy(classname, {
construct(target, args) {
if (!instance) {
instance = Reflect.construct(target, args);
}
return instance;
},
});
(singletonClass as any).prototype.constructor = singletonClass;
return singletonClass;
}