الگوی طراحی Singleton به شما امکان میدهد اطمینان حاصل کنید که یک کلاس فقط یک نمونه دارد، در حالی که یک اشارهگر سراسری برای دسترسی به این نمونه ارائه میکند.
این الگوی طراحی با نقض Single Responsibility Principle چند مشکل را همزمان حل میکند:
این مشکل جنبه دیگری هم دارد. شما نمیخواهید کدی که مشکل را حل میکند در سراسر برنامه پخش شود، بنابراین بهتر است که آن را در یک کلاس قرار دهید. مخصوصا اگر بقیه کد شما از قبل به آن وابستگی داشته باشد.
متد Constructor پیش فرض را Private کنید تا دیگر اشیا از عملگر New استفاده نکنند. یک متد Static ایجاد کنید که به عنوان سازنده عمل کند. این متد از Constructor که Private شده برای ایجاد یک شی استفاده کرده و آن را در یک فیلد Static ذخیره میکند.
همه فراخوانیهای بعدی به این متد، شی ذخیره شده را برمیگرداند. بنابراین اگر کد شما به کلاس Singleton دسترسی دارد، میتواند متد سازنده جدید را فراخوانی کند. و هر زمان آن متد فراخوانی شود همان شی ذخیره شد در فیلد Static برگردانده خواهد شد.
دولت نمونهای از الگوی Singleton است. یک کشور میتواند تنها یک دولت رسمی داشته باشد صرف نظر از هویت شخصی افراد تشکیل دهنده آن، عنوان دولت یک اشارهگر سراسری است که گروه افراد مسئول را، مشخص میکند.
از الگوی Singleton زمانی استفاده میشود که یک کلاس در برنامه شما فقط باید دارای یک نمونه واحد قابل دسترس برای تمام کدها باشد. مانند یک شی واحد از پایگاه داده که توسط بخشهای مختلف برنامه به اشتراک گذاشته شده است.
این الگوی تمام ابزارهای دیگر برای ایجاد اشیا از یک کلاس را غیرفعال میکند، به جز روشی خاص، که یا یک شی جدید ایجاد میکند یا اگر قبلا ایجاد شده باشد، آن را بر میگرداند.
زمانی که به کنترل دقیق تری بر روی متغیرهای سراسری نیاز دارید از الگوی Singleton استفاده کنید.
الگوی Singleton تضمین میکند که، فقط یک نمونه از یک کلاس وجود دارد هیچ چیز به جز خود کلاس Singleton نمیتواند جایگزین نمونه ذخیره شده شود.
توجه داشته باشید که همیشه میتوانید این محدودیت را تنظیم کنید و اجازه ایجاد هر تعداد نمونه از Singleton را بدهید. تنها کدی که نیاز به تغییر دارد، بدنه متد نمونهگیر است.