14-05-1395، 02:37 ب.ظ
14-05-1395، 04:12 ب.ظ
گاهی اوقات توی برنامه شرایطی پیش میاد که از یه کلاس خاص میخواین فقط یکی توی حافظه باشه. یعنی اگه چندین بار از روی کلاس شئ ساخته بشه، فقط همون شئ اولیه برگردونده بشه. یکی از کاربردهای این سیستم توی کلاسهایی موسوم به Registry هست. در این کلاسها، هر بخش از برنامه که بخواد با این کلاس کار کنه، یه شئ ازش میسازه و ازطریق اون به تمام مقادیری که بخشهای دیگه برنامه داخل این کلاس ایجاد کرده بودن، دسترسی پیدا میکنه و میتونه مقادیر خودش رو هم بهش اضافه کنه تا بقیه بتونن بخونن. الگوی طراحی Singleton برای همین منظور طراحی شده. روش کارش هم خیلی ساده است:
ابتدا باید سازنده رو private کنیم تا کسی نتونه با new از کلاس شئ بسازه. بعد یه فیلد static از نوع کلاس تعریف میکنیم و داخل خود کلاس new میکنیم (چون توی بدنه کلاس هستیم به سازنده private دسترسی داریم). درنهایت یه متد تعریف میکنیم که شئ استاتیک رو برمیگردونه. حالا اینطوری میتونیم دهها بار getInstance رو صدا بزنیم و همیشه همون شئ اول برگردونده میشه که موقع بارگذاری کلاس در حافظه، تعریف شده:
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 رو صدا بزنیم و همیشه همون شئ اول برگردونده میشه که موقع بارگذاری کلاس در حافظه، تعریف شده:
Registry r1 = Registry.getInstance(); Registry r2 = Registry.getInstance(); // r1 == r2