الگوی تک تن دارای موارد استفاده جامد است، بنابراین مطمئن شوید که چگونه از آن استفاده کنید.
الگوی تک تن یکی از الگوهای طراحی ساده تر است. کلاسی که از الگوی طراحی singleton استفاده می کند، یک نمونه واحد دارد که به تنهایی آن را مدیریت می کند. این کلاس از ایجاد یک نمونه از کلاس دیگر جلوگیری می کند.
یک کلاس singleton همچنین یک نقطه دسترسی سراسری واحد را برای نمونه ای که ایجاد می کند فراهم می کند. بنابراین، هر کلاسی که یک نمونه از یک کلاس singleton می خواهد، باید از طریق نقطه دسترسی واحد خود به آن دسترسی داشته باشد.
پشتیبانی عالی جاوا از برنامه نویسی شی گرا، استفاده از الگوی طراحی singleton را آسان می کند.
پیاده سازی الگوی Singleton با استفاده از جاوا
راه های زیادی برای پیاده سازی الگوی singleton در جاوا وجود دارد. رویکردهای مشتاق و تنبل تغییرات رایجی هستند. هر یک از این رویکردها محاسن و معایب خاص خود را دارند. بنابراین، روشی که برای به کارگیری انتخاب می کنید باید به نحوه عملکرد برنامه شما بستگی داشته باشد.
رویکرد مشتاقانه
پیادهسازی الگوی سینگلتون با رویکرد مشتاق به این معنی است که کلاس هنگام بارگذاری، نمونه جدیدی از خود ایجاد میکند.
public class EagerSingleton {
private static EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
کلاس EagerSingletonJava یک نمونه جدید از خود در هنگام بارگذاری ایجاد می کند. این نمونه را به متغیر نمونه استاتیک خصوصی اختصاص می دهد که فقط در کلاس singleton قابل دسترسی است. تنها نقطه دسترسی خارجی به متغیر نمونه از طریق متد getInstance() است. آن متد نمونه قبلی کلاس را برمی گرداند.
این رویکرد عالی است زیرا از مشکل چند رشته ای که یکی از بزرگترین چالش های الگوی تک تنه است جلوگیری می کند. قبل از اینکه هر رشته جدیدی بتواند به متغیر نمونه خود دسترسی پیدا کند، مشکل چند رشته ای را با ایجاد یک نمونه جدید از خود حل می کند. این تضمین می کند که هر رشته فقط به همان نمونه دسترسی خواهد داشت.
با این حال، رویکرد مشتاق تنها زمانی عملی است که برنامه شما از نمونه ای از کلاس singleton هنگام شروع اجرا استفاده کند. در غیر این صورت، قبل از اینکه برنامه شما به آن نیاز داشته باشد، با استفاده غیر ضروری از منابع، یک شی ایجاد خواهید کرد.
رویکرد تنبلی
رویکرد تنبل راه حل مشکل رویکرد مشتاق است. این به شما اجازه می دهد که یک نمونه جدید از یک کلاس singleton را تنها زمانی که برنامه شما به آن نیاز دارد ایجاد کنید.
public class LazySingleton {
private volatile static LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
رویکرد تنبل مشکل چند رشته ای را با استفاده از کلمه کلیدی هماهنگ حل می کند. این امر مانع از دسترسی همزمان دو رشته به متغیر نمونه می شود. با این حال، Synchronized گران است، بنابراین برنامه فقط یک بار از آن استفاده می کند، زمانی که برای اولین بار getInstance() را فراخوانی می کند.
چه زمانی از الگوی Singleton استفاده کنیم
الگوی Singleton در بسیاری از سناریوها مفید است، برای ایجاد کادرهای محاوره ای، مدیریت تنظیمات رجیستری یا مدیریت thread pools.
یکی دیگر از کاربردهای رایج الگوی singleton ایجاد یک کلاس مرکزی است که اتصالات پایگاه داده را مدیریت می کند.