از این الگو زمانی استفاده می‌شود که قصد داشته باشید از یک کلاس خاص فقط و فقط یک شی در طول پروژه وجود داشته باشد و در تمامی قسمت‌های مختلف پروژه از این شی استفاده شود. با این الگو میتوان مفهوم Lazy Loading را نیز در طول پروژه پیاده‌سازی کرد. (به این معنی که بارگزاری کلاس مورد نظر در حافظه زمانی انجام می‌شود که اولین فراخوانی به آن کلاس انجام شود، و تا زمانی که اولین فراخوانی انجام نشود کلاس مورد نظر در حافظه بارگزاری نخواهد شد.)
singleton-pattern

در این الگو متد سازنده کلاس مورد نظر به صورت Private یا Protected تعریف میگردد تا امکان ایجاد کلاس با دستور new وجود نداشته باشد. در عوض متدی با دسترسی public و به صورت static در کلاس مورد نظر ایجاد می‌شود(accessor function) تا Client بتواند با استفاده از این متد، کلاس مربوطه را ایجاد نماید.
موارد استفاده از این الگو محدود است. به عنوان مثال برای ایجاد بخش Log در پروژه میتوان کلاسی ایجاد کرد که از این الگو استفاده کند. علاوه بر این در استفاده از الگوی Service Locator نیز میتوان از Singleton استفاده کرد. به مثال های زیر توجه نمایید :‌

در مثال بالا با یکبار فراخوانی متد pickBook یک شی از کلاس BookOne بازگردانده میشود. اما در دفعات بعدی مقدار null بازگردانده میشود. از این روش برای قسمت هایی میتوان استفاده کرد که به عبارتی یکبار مصرف هستند!

در مثال بالا با اولین فراخوانی متد getBook یک شی از کلاس BookTwo بازگردانده میشود. با اجرای متد increaseCounter یک عدد به کانتر افزوده میشود. با فراخوانی مجدد getBook همان شی قبلی بازگردانده میشود لذا با اجرای متد increaseCounter یک عدد به کانتر قبلی افزوده میشود در نهایت مقدار کانتر برابر با 2 خواهد بود. از این روش نیز زمانی استفاده میشود که قرار است اطلاعات یک کلاس به صورت اشتراکی استفاده شود و در طول اجرای برنامه مقادیر آن توسط بخش های مختلف تحت تاثیر قرار بگیرد. به عنوان مثال یک کلاس با نام Customer را در نظر بگیرید که قرار است در طول اجرای برنامه اطلاعات customer تکمیل شود.(address – general info – credit card info) لذا ممکن است هر بخش از برنامه وظیفه تکمیل اطلاعات مخصوص به خود را داشته باشد. در نهایت با Singleton میتوانید مطمئن شوید که همه بخش ها فقط روی یک Customer کار میکنند.

محمد باقر رستمی

برنامه نویسی رو دوست دارم و از کارم و بیشتر از اون از یادگرفتن لذت می برم. دوست دارم از این طریق برای مردم دنیا مفید باشم. فارغ از رنگ، نژاد، ملیت و جنسیت.

Latest posts by محمد باقر رستمی (see all)

facebooktwittergoogle_pluslinkedin

دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

*