Observer & Singleton Patterns
What is the correct way to implement lazy initialization in a Singleton?
class LazySingleton {
static #instance;
#data;
constructor() {
if (LazySingleton.#instance) {
return LazySingleton.#instance;
}
this.#data = null;
LazySingleton.#instance = this;
}
static getInstance() {
if (!LazySingleton.#instance) {
LazySingleton.#instance = new LazySingleton();
}
return LazySingleton.#instance;
}
initialize() {
if (this.#data === null) {
this.#data = this.loadExpensiveData();
}
return this.#data;
}
loadExpensiveData() {
// Expensive initialization logic
}
}