Singleton deseninin bazı sağlam kullanım durumları vardır, bu yüzden onu nasıl kullanacağınızı bildiğinizden emin olun.
Singleton deseni, daha basit tasarım desenlerinden biridir. Singleton tasarım desenini kullanan bir sınıf, kendi başına yönettiği tek bir örneğe sahiptir. Bu sınıf, başka herhangi bir sınıfın onun bir örneğini oluşturmasını engeller.
Singleton sınıfı, oluşturduğu örneğe tek bir genel erişim noktası da sağlar. Bu nedenle, bir singleton sınıfının örneğini isteyen herhangi bir sınıfın, tek erişim noktası üzerinden ona erişmesi gerekir.
Java’nın nesne yönelimli programlama için mükemmel desteği, tekli tasarım desenini kullanmayı kolaylaştırır.
Java Kullanarak Singleton Kalıbını Uygulamak
Java’da singleton modelini uygulamanın birçok yolu vardır; hevesli ve tembel yaklaşımlar yaygın varyasyonlardır. Bu yaklaşımların her birinin kendi yararları ve sakıncaları vardır. Bu nedenle, kullanmayı seçtiğiniz yöntem, uygulamanızın nasıl çalışacağına bağlı olmalıdır.
İstekli Yaklaşım
Singleton modelini istekli yaklaşımla uygulamak, sınıfın yüklendiğinde kendisinin yeni bir örneğini oluşturması anlamına gelir.
public class EagerSingleton {
private static EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
EagerSingleton Java sınıfı , yüklenirken kendisinin yeni bir örneğini oluşturur. Bu örneği , yalnızca singleton sınıfı içinde erişilebilen özel statik örnek değişkenine atar. Örnek değişkene harici erişimin tek noktası getInstance() yöntemidir. Bu yöntem, sınıfın önceden oluşturulmuş örneğini döndürür.
Bu yaklaşım, singleton deseninin en büyük zorluklarından biri olan çoklu iş parçacığı sorununu önlediği için harika . Herhangi bir yeni iş parçacığı kendi örnek değişkenine erişmeden önce kendisinin yeni bir örneğini oluşturarak çoklu iş parçacığı sorununu çözer. Bu, her iş parçacığının yalnızca aynı örneğe erişimi olacağını garanti eder.
Ancak, istekli yaklaşım yalnızca, uygulamanız çalışmaya başlarken singleton sınıfının bir örneğini kullanacaksa pratiktir. Aksi takdirde, kaynakları gereksiz yere kullanarak uygulamanız ihtiyaç duymadan önce bir nesne yaratmış olursunuz.
Tembel Yaklaşım
Tembel yaklaşım, istekli yaklaşım probleminin çözümüdür. Yalnızca programınız ihtiyaç duyduğunda, bir singleton sınıfının yeni bir örneğini oluşturmanıza olanak tanır.
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;
}
}
Tembel yaklaşım, synchronized anahtar sözcüğünü kullanarak çoklu iş parçacığı sorununu çözer. Bu, iki iş parçacığının aynı anda örnek değişkene erişmesini engeller. Senkronize etme pahalıdır, bu nedenle uygulama onu yalnızca bir kez, getInstance()’ı ilk çağırdığında kullanır.
Singleton Kalıbı Ne Zaman Kullanılır?
Singleton modeli, iletişim kutuları oluşturmak, kayıt defteri ayarlarını işlemek veya iş parçacığı havuzlarını yönetmek için birçok senaryoda kullanışlıdır.
Singleton modelinin diğer bir yaygın kullanımı, veritabanı bağlantılarını yöneten merkezi bir sınıf oluşturmaktır.