ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
گاهی اوقات توی برنامه شرایطی پیش میاد که از یه کلاس خاص میخواین فقط یکی توی حافظه باشه. یعنی اگه چندین بار از روی کلاس شئ ساخته بشه، فقط همون شئ اولیه برگردونده بشه. یکی از کاربردهای این سیستم توی کلاسهایی موسوم به Registry هست. در این کلاسها، هر بخش از برنامه که بخواد با این کلاس کار کنه، یه شئ ازش میسازه و ازطریق اون به تمام مقادیری که بخشهای دیگه برنامه داخل این کلاس ایجاد کرده بودن، دسترسی پیدا میکنه و میتونه مقادیر خودش رو هم بهش اضافه کنه تا بقیه بتونن بخونن. الگوی طراحی Singleton برای همین منظور طراحی شده. روش کارش هم خیلی ساده است:
public class Reigstry {
private static Registry instance = new Registry();
private Registry() {
}
public static Registry getInstance() {
return Registry.instance;
}
/* Other code goes here */
}
ابتدا باید سازنده رو private کنیم تا کسی نتونه با new از کلاس شئ بسازه. بعد یه فیلد static از نوع کلاس تعریف میکنیم و داخل خود کلاس new میکنیم (چون توی بدنه کلاس هستیم به سازنده private دسترسی داریم). درنهایت یه متد تعریف میکنیم که شئ استاتیک رو برمیگردونه. حالا اینطوری میتونیم دهها بار getInstance رو صدا بزنیم و همیشه همون شئ اول برگردونده میشه که موقع بارگذاری کلاس در حافظه، تعریف شده: