الگوی طراحی Singleton: به سادگی توضیح داده شده است

در طراحی نرم افزار ، برخی از اشیاء در کل برنامه به اشتراک گذاشته می شوند. به یک مدیر پیکربندی ، یک اتصال بانک اطلاعاتی یا یک ورود به سیستم فکر کنید. شما نمی خواهید چندین مورد از اینها ایجاد کنید – فقط موردی که در همه جا مورد استفاده مجدد قرار می گیرد. این دقیقاً همان جایی است که الگوی Singleton وارد می شود.
the الگوی Singleton چیست؟
الگوی Singleton تضمین می کند که یک کلاس فقط یک نمونه دارد و یک نقطه دسترسی جهانی به آن را فراهم می کند.
این بخشی از الگوهای طراحی خلاقانه است – الگوهای متمرکز بر ایجاد شی.
💡 قیاس زندگی واقعی
به یک دولت فکر کنید. فقط یک نخست وزیر (در حالت ایده آل) وجود دارد. اگر سعی می کنید یک مورد جدید ایجاد کنید ، باید به موجود موجود اشاره کند.
📦 از موارد استفاده کنید
- اتصالات پایگاه داده
- خدمات ورود به سیستم
- مدیران پیکربندی/محیط زیست
- استخرهای نخ
- مکانیسم های ذخیره سازی
👨💻 مثال در JavaScript
class Singleton {
constructor() {
if (Singleton.instance) {
return Singleton.instance;
}
this.timestamp = new Date();
Singleton.instance = this;
}
getTime() {
return this.timestamp;
}
}
// Usage
const a = new Singleton();
const b = new Singleton();
console.log(a === b); // true
console.log(a.getTime() === b.getTime()); // true
🐍 مثال در پایتون
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super(Singleton, cls).__new__(cls)
cls._instance.timestamp = "Created at instance creation"
return cls._instance
# Usage
a = Singleton()
b = Singleton()
print(a is b) # True
✅ جوانب مثبت
- دسترسی کنترل شده به یک نمونه واحد
- ذخیره حافظه (مخصوصاً برای اشیاء گران قیمت مفید است)
- می توان تنبلی بارگیری کرد (فقط در صورت لزوم ایجاد شده است)
❌ منفی
- حالت جهانی می تواند سخت باشد
- می تواند اصل مسئولیت واحد را نقض کند
- در محیط های چند رشته ای ، به قفل مناسب نیاز دارد (به خصوص در جاوا/C ++)
🧠 بهترین روشها
- در صورت امکان آن را بدون تابعیت نگه دارید
- از سوء استفاده از آن مانند یک متغیر جهانی خودداری کنید
- در برنامه های چند رشته ای محتاط باشید (از قفل/mutexes استفاده کنید)
📌 به طور خلاصه
- الگوی Singleton ابزاری مفید است که شما دقیقاً به یک نمونه از یک کلاس نیاز دارید تا اقدامات را در سراسر سیستم هماهنگ کنید. از آن عاقلانه استفاده کنید و برنامه خود را کارآمدتر و ساختار یافته تر می کنید.