Skip to content

Singleton Pattern

Singleton Pattern — bu creational design pattern bo‘lib, u class (klass) yoki objectning faqat bir marta instantiate bo’lishini kafolatlaydi va unga global tarzda murojaat qilish imkonini beradi. Ushbu yagona instance butun application bo‘ylab ulashilishi mumkin, shu sababli Singletonlar application ichida global stateni boshqarish uchun juda qulay hisoblanadi.

Frontend ilovalarda bu pattern ko‘pincha:

  • global state
  • konfiguratsiya
  • logger
  • API client
  • cache yoki service manager

uchun ishlatiladi.

ES2015 class yordamida singleton yaratish quyidagi tarzda amalga oshiriladi:

class ConfigService {
static instance;
constructor() {
if (ConfigService.instance) {
return ConfigService.instance;
}
this.apiUrl = "https://api.example.com";
ConfigService.instance = this;
}
getApiUrl() {
return this.apiUrl;
}
}
// Foydalanish
const c1 = new ConfigService();
const c2 = new ConfigService();
console.log(c1 === c2); // true

Bu yerda classni qayta chaqirsak ham, doim bitta instance qaytaradi va xotirani tejashimizga yordam beradi.

Biz class dan foydalanmasdan ham to‘g‘ridan-to‘g‘ri singleton yaratishimiz mumkin, bu esa ancha sodda va toza code yozishga olib keladi.

Oddiy closure yordamida singleton yaratish uchun biz quyidagilarni bajarishimiz kerak:

const Singleton = (function () {
let instance;
function createInstance() {
return {
apiUrl: "https://api.example.com",
logApiUrl: () => console.log("https://api.example.com"),
};
}
return {
getInstance() {
if (!instance) {
instance = createInstance();
}
return instance;
},
};
})();
// Foydalanish
const a = Singleton.getInstance();
const b = Singleton.getInstance();
console.log(a === b); // true