سینگلتون mahdi.sg مرداد ۲۴, ۱۴۰۳

سینگلتون


هـــدف
Singleton یک الگوی طراحی خلاقانه است که به شما امکان می دهد اطمینان حاصل کنید که یک کلاس فقط یک نمونه دارد، در حالی که یک نقطه دسترسی جهانی به این نمونه ارائه می دهد.
Singleton pattern
مـسئـــلـه

الگوی تک‌نهاد همزمان دو مشکل را حل می‌کند که با اصل مسئولیت واحد مغایرت دارد:

۱- تضمین می‌کند که یک کلاس تنها یک نمونه دارد. چرا کسی می‌خواهد تعداد نمونه‌های یک کلاس را کنترل کند؟ رایج‌ترین دلیل برای این کار کنترل دسترسی به برخی منابع مشترک مانند پایگاه داده یا فایل است.

به این صورت عمل می‌کند: تصور کنید که یک شیء ایجاد کرده‌اید، اما پس از مدتی تصمیم گرفتید یک شیء جدید ایجاد کنید. به جای دریافت یک شیء جدید، شی‌ای را که قبلاً ایجاد کرده‌اید دریافت خواهید کرد.

توجه داشته باشید که این رفتار با استفاده از یک سازنده معمولی قابل پیاده‌سازی نیست زیرا فراخوانی یک سازنده همیشه باید طبق طراحی یک شیء جدید را بازگرداند.

The global access to an object

 

مشتریان حتی ممکن است متوجه نشوند که همیشه با یک شی کار می کنند.

 

 

۲- یک نقطه دسترسی جهانی به آن نمونه ارائه دهید. متغیرهای جهانی را به خاطر دارید که شما (خوب، من) برای ذخیره برخی اشیاء ضروری استفاده می‌کردید؟ در حالی که آن‌ها بسیار مفید هستند، اما بسیار ناامن نیز هستند زیرا هر کدی می‌تواند به طور بالقوه محتویات آن متغیرها را بازنویسی کند و برنامه را خراب کند.

مانند یک متغیر جهانی، الگوی تک‌نهاد به شما اجازه می‌دهد از هر جایی در برنامه به یک شی دسترسی داشته باشید. با این حال، همچنین از آن نمونه در برابر بازنویسی توسط کدهای دیگر محافظت می‌کند.

جنبه دیگری از این مشکل وجود دارد: نمی‌خواهید کدی که مشکل شماره ۱ را حل می‌کند در سراسر برنامه شما پخش شود. بهتر است آن را در یک کلاس داشته باشید، به خصوص اگر بقیه کد شما از قبل به آن وابسته است.

امروزه، الگوی تک‌نهاد آنقدر محبوب شده است که مردم ممکن است چیزی را تک‌نهاد بنامند حتی اگر فقط یکی از مشکلات ذکر شده را حل کند.

همه پیاده‌سازی‌های تک‌نهاد این دو مرحله مشترک را دارند:

  • سازنده پیش‌فرض را خصوصی کنید تا از استفاده سایر اشیاء از عملگر new با کلاس تک‌نهاد جلوگیری کنید.
  • یک متد ایجاد استاتیک ایجاد کنید که به عنوان یک سازنده عمل می‌کند. در زیر کاپوت، این متد سازنده خصوصی را برای ایجاد یک شی فراخوانی می‌کند و آن را در یک فیلد استاتیک ذخیره می‌کند. تمام فراخوانی‌های بعدی به این متد شی کش شده را بازمی‌گرداند.
  • اگر کد شما به کلاس تک‌نهاد دسترسی دارد، می‌تواند متد استاتیک تک‌نهاد را فراخوانی کند. بنابراین هر زمان که این متد فراخوانی می‌شود، همیشه همان شی بازگردانده می‌شود.

 

دولت یک مثال عالی از الگوی تک‌نهاد است. یک کشور فقط می‌تواند یک دولت رسمی داشته باشد. صرف نظر از هویت شخصی افرادی که دولت را تشکیل می‌دهند، عنوان “دولت X” یک نقطه دسترسی جهانی است که گروه افراد مسئول را شناسایی می‌کند.

ســاخــتـــار

 

The structure of the Singleton pattern

 

 

برای مطـالعـه متن کامل مقالــه، مجموعه کــــدها، نحوه پیاده سازی، مزایا و معایب و روابط با الگوهای دیگر، ایــنــجـــا کلیک کنید.