ساخت کلاس Singleton در جاوااسکریپت ES6

ساختن کلاس و استفاده ازش در جاوااسکریپت که به صورت ذاتی یک زبون Object Oriented نیست، همیشه برای توسعه دهنده ها کار چالش برانگیزی بوده. با معرفی شدن استاندارد ES6 در سال ۲۰۱۵، بخش عظیمی از این چالش ها و تمامی ترفندهایی که برای شبیه سازی کلاس ها در جاوااسکریپت استفاده می شد،‌ دیگه کاربردشون رو از دست دادن. درحال حاضر اکثر توسعه دهندگان جاوااسکریپت از استاندارد ES6 استفاده میکنن و دیگه ساختن و استفاده از کلاس کار نسبتا ساده ای شده.

به عنوان نمونه یه کلاس Student در جی اس مدرن، به سادگی زیر ساخته و استفاده میشه:

// Define
class Student {
  constructor(name) {
    this.name = name
  }

  whoAmI() {
    return `I am ${this.name}`
  }
}

// Use
const todd = new Student('Todd')
todd.whoAmI() // Returns: `I am Todd`

Singleton

اگر نیاز باشه کلاسی که تعریف میکنید، فقط یه اینستنس ازش وجود داشته باشه و هربار new گرفتن ازش،‌همون اینستنش رو برگردونه، به این کلاس میگن کلاس Singleton. نمونه هایی که میشه از Singleton استفاده کرد:

  • سرویس لاگر
  • سرویس ذخیره سازی و خواندن از یک پوشه در فایل سیستم
  • سرویس خواندن از کانفیگ پروژه

استفاده از Singleton همیشه باید ۳ مورد زیر رو پوشش بده. اگر Singleton ای که دارید میسازید هر ۳ مورد رو پوشش نمیده مطمئن باشید دارید جایی از کار رو اشتباه میزنید :دی

  • کنترل کردن ارتباطات کانکارنت روی یه ریسورس
  • کنترل ارتباط به یه ریسورس از مکان ها و سرویس های مختلف و ایزوله از هم
  • تنها یه آبجکت از کلاس خارج بشه

ساخت Singleton در ES6

برای ساخت یه سینگلتون میتونید از کدبیس زیر الهام بگیرید:

// SingletonService.js

let instance = null

class SingletonService {
  constructor() {
    if (!instance) {
      instance = this
    }

    return instance
  }

  // All other stuff here

}