Singleton deseni, daha basit tasarım modellerinden biridir. Singleton tasarım modelini 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ı ayrıca oluşturduğu örneğe tek bir genel erişim noktası sağlar. Bu nedenle, bir singleton sınıfının örneğini isteyen herhangi bir sınıfın, ona tek erişim noktası üzerinden erişmesi gerekir.

Java'nın nesne yönelimli programlamaya yönelik mükemmel desteği, tekil tasarım modelini kullanmayı kolaylaştırır.

Java Kullanarak Singleton Kalıbını Uygulama

Singleton modelini Java'da 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 kalıbını istekli yaklaşımla uygulamak, sınıfın yüklendiğinde kendisinin yeni bir örneğini yaratması anlamına gelir.

halksınıfİstekliSingleton{
özelstatik EagerSingleton örneği = yeni EagerSingleton();

özelİstekliSingleton(){}

halkstatik İstekliSingleton getInstance(){
geri dönmek misal;
}
}

bu İstekliSingletonJava sınıfı yüklenirken kendisinin yeni bir örneğini oluşturur. Bu örneği özel statik olarak atar örnek değişkeni, yalnızca singleton sınıfı içinde erişilebilir. Örnek değişkenine harici erişimin tek noktası, getInstance() yöntem. Bu yöntem, sınıfın önceden oluşturulmuş örneğini döndürür.

önlediği için bu yaklaşım harikadır. çoklu iş parçacığı Singleton modelinin en büyük zorluklarından biri olan sorun. Herhangi bir yeni iş parçacığının örnek değişkenine erişmesinden ö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 tekil sınıfın bir örneğini kullanacaksa pratiktir. Aksi takdirde, kaynakları gereksiz yere kullanarak, uygulamanız ihtiyaç duymadan önce bir nesne oluşturursunuz.

Tembel Yaklaşım

Tembel yaklaşım, istekli yaklaşım probleminin çözümüdür. Yalnızca programınız ihtiyaç duyduğunda yeni bir singleton sınıfı örneği oluşturmanıza olanak tanır.

halksınıfTembelSingleton{
özeluçucustatik LazySingleton örneği;

özelTembelSingleton(){}

halkstatik TembelSingleton getInstance(){
eğer (örnek == hükümsüz) {
senkronize (TembelSingleton.sınıf) {
eğer (örnek == hükümsüz) {
örnek = yeni LazySingleton();
}
}
}

geri dönmek misal;
}
}

Lazy yaklaşımı, multithreading problemini çözer. senkronize anahtar kelime. Bu, iki iş parçacığının aynı anda örnek değişkenine erişmesini engeller. Yine de eşitleme pahalıdır, bu nedenle uygulama bunu yalnızca bir kez, getInstance() işlevini 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.