Java'da Singleton Nasıl Yapılır? Başlatma Türleri, Karşılaştırma ve Hatırlanması Gereken Noktalar
Yayınlanan: 2020-10-07Java'daki bir singleton sınıfı, yalnızca bir nesneye, yani sınıfın yalnızca bir örneğine sahip olan sınıf olarak tanımlanır. Örneğin, sınıf başına yalnızca bir örnekle sınırlandırılması, sınıfın yalnızca bir örneğini gerektiren belirli programların kodlanmasına yardımcı olur. Singleton sınıfının tek örneğine global bir erişim noktası verilir.
Singleton sınıfı, Java programlamadaki önemli tasarım modellerinden biridir. Singleton sınıfları, kaynakların sınırlandırılmasına ve optimize edilmesine yardımcı olur; veritabanı bağlantılarında veya soketlerinde çok kullanılır. Singleton sınıfı için uygulama sözdizimleri vardır ve iyi bir geliştiricinin bunu bilmesi gerekir. Java'da singleton sınıfının uygulamasını görelim.
Yazılım mühendisi programlarını dünyanın en iyi üniversitelerinden çevrimiçi öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.
Okuyun: Java Mimarisi ve Bileşenleri Açıklandı
İçindekiler
başlatma
Java'da bir singleton'un başlatılması özel bir kurucu aracılığıyla yapılır. Özel kurucular, diğer sınıflarda, singleton sınıfınızla aynı örneği oluşturamamaya yardımcı olur. Java'da singleton sınıfının aşağıda listelenen beş tür başlatma türü vardır:
1. İstekli Başlatma
Genellikle getInstance() olarak adlandırılan genel bir yöntem oluşturulur. Bu yöntem, sınıfın bir örneğini oluşturmak için yalnızca bir giriş noktası sağlamaya yardımcı olacak ve böylece onu tek bir sınıf haline getirecektir. İstekli başlatmadaki sınıfın örneği, sınıf yüklemesi sırasında oluşturulur.

Bu tür başlatma tekniği, kullanıcı kullanmasa bile sınıfın örneğini otomatik olarak oluşturur. Bu, bellek sorunlarına ve kodda gereksiz uzunluğa neden olabilir. Bellek sızıntısı sorununu gidermek için, Java'da bir singleton sınıfı için başka bir tür başlatma tekniği görelim.
2. Tembel Başlatma
Sınıfın örneği, tembel başlatmada getInstance () yönteminin kendisinde başlatılır. Tembel başlatmadaki yöntem, sınıfın örneğinin oluşturulup oluşturulmadığını kontrol edecek ve oluşturulmamışsa, yalnızca bir örnek oluşturacak ve böylece bellek sızıntısı sorununu çözecektir.
Tembel başlatmada oluşturulan yöntem statiktir ve bir dönüş türü nesnesine sahiptir. Tembel başlatmadaki singleton örneği, getInstance() yöntemi ilk kez çağrılıncaya kadar oluşturulmaz.
3. Çift Kilit Yöntemi ile Tembel Başlatma
Bu yöntem, birden fazla iş parçacığı sırasında kullanılır. Eğer programda iki thread kullanıyorsak ve her ikisine de instance null iken başlarken 'if' deyimi ile ulaşılabiliyorsa, bu bir çakışma durumu yaratacaktır ve hatalarla karşılaşabilirsiniz.
Bu sorun, diğer iş parçacığı bloke edilirken örneğin başlatılması için senkronize bloğa bir seferde yalnızca bir iş parçacığının girdiği Çift Kilit Yöntemi ile çözülür. İlk iş parçacığı senkronize bloktan çıktığında, yalnızca ikinci iş parçacığı girer ve başka bir örnek oluşturur. Varsayılan olarak, ikinci iş parçacığı örneğin boş olup olmadığını kontrol etmez.
4. Tembel Yükleme Yöntemi
Bu yöntemde iç içe sınıf oluşturulur ve JLS (Java Dili Belirtimleri) ilkelerine göre çalışır. Sınıfta statik veri üyeleri olmayacaktı; JVM, sınıfın bir örneğini oluşturmayacaktır. Örnek, yalnızca getInstance() yöntemini çağırdığımızda talep üzerine oluşturulur.
Başlatma ve yükleme için yöntemi senkronize etmenize gerek yoktur, çünkü bu yöntem tüm Instance() alma çağrılarının otomatik senkronizasyonuna yardımcı olur.
5. Enums Yöntemi
Bir singleton sınıfının birden çok örneği, yukarıdaki yöntemlerde serileştirme ve yansıtma yoluyla yine de oluşturulabilir. Katı bir singleton sınıfı yapılması durumunda bu yöntem kullanılabilir. Sabit olan ve yalnızca derleme zamanında çalışan bu yöntemde enums alanları kullanılır.

Bir Enum, Enum türünün örneğidir ve yalnızca Enum türü kodda ilk kez çağrıldığında/çağrıldığında oluşturulacaktır. Bu yöntem, örneğin klonlanmasını kısıtlar ve mükemmel bir singleton sınıfı oluşturur.
Ayrıca Okuyun: Bugün Kontrol Etmeniz Gereken Java'daki En İyi 12 Model Programı
Serileştirme ve Yansıma
Serileştirme, Java nesnelerinin bir JVM'den (Java Sanal Makinesi) diğerine taşınmasına yardımcı olur. Serileştirme, bir sınıfın birden çok örneğini oluşturmak için kullanılan yöntemlerden biridir. Serileştirme, nesneyi bir bayt akışına dönüştürür ve ardından aktarım yapılır.
Bayt akışı, seri durumdan çıkarma işlemini kullanarak nesnenin başka bir JVM'de yeniden oluşturulmasına yardımcı olur. Birden fazla sistemin aralarında iletişim kurmasına ve nesneleri paylaşmasına yardımcı olur. Nesneler farklı JVM'lerde çalışacağından çapraz JVM senkronizasyonuna yardımcı olur.
Yansıma aynı zamanda Java'da nesneleri klonlamanın bir yöntemidir. Yansıma, bilinmeyen herhangi bir nesnenin sınıfını ve nesne aracılığıyla erişilebilen o belirli sınıfın yöntemlerini bilmemize yardımcı olan bir API'dir. Yansıma, programcılar tarafından çalışma zamanında sınıfların ve yöntemlerin davranışını değiştirmek için yaygın olarak kullanılır.
Yansımada kullanılan üç ana komut, nesnenin ait olduğu sınıfı bilmek için getClass(), nesnenin sınıfının genel oluşturucularını almak için getConstructors(), gözlem altındaki sınıfın genel yöntemlerini bilmek için getMethods()'dur.
Normal Sınıf Vs Singleton Sınıfı
Java'daki standart bir sınıf, kendisini başlatmak için yapıcıları kullanır, oysa bir tekli sınıfı başlatmak için getInstance() yöntemini kullanırız. Aynı sınıf ve yöntem adını da kullanabiliriz. Önce normal sınıflar için bir nesne yaratırız ve sonra onun metotlarını ve özelliklerini kullanırız.
Buna karşılık, bir singleton sınıfında, sınıfın statik özelliğini kullanarak bir örnek yaratırız ve kod boyunca herhangi bir noktada o belirli sınıf yalnızca tek bir örnek döndürür.
Singleton sınıflarının birçok avantajının yanı sıra, nesneler ve yöntemler sıkı bir şekilde birleştirilirse, singleton sınıfları kurcalama birimi test yöntemleri gibi bazı boşluklar da vardır. Bu durumda bir singleton'a tamamen işlevsel bir sınıf ayırmanız gerekecek.
Gizli bağımlılıklar bazen singleton sınıfı tarafından da oluşturulur, çünkü singleton sınıfının referansı diğer yöntemlere iletilir ve tamamen şeffaf değildir, bu nedenle kodlayıcıların/geliştiricilerin yöntemleri ve sınıfları takip etmesini zorlaştırır. Tekil bir desen oluşturmadan önce bu eksiklikleri akılda tutmalı ve en aza indirmeye çalışmalıdır.
Mükemmel Bir Singleton Sınıfı Oluşturmak İçin Noktalar
1. Mükemmel bir singleton sınıfı oluşturmak için üzerinde durulması gereken noktalar şunlardır:
2. Bir singleton sınıfında birden fazla thread oluşturuyorsanız, o zaman tüm threadlerin singleton sınıfını aynı anda başlatmadığından emin olun. İş parçacığı güvenli singleton sınıfları yapmaya çalışmalısınız.

3. Yapıcı görünürlüğünü çalışma zamanında herkese açık olarak değiştirerek ve belirli bir singleton sınıfının yalnızca bir örneğinin olduğundan emin olarak, singleton sınıfınızı yansıma kanıtı yapın.
4. Birden fazla iş parçacığı varsa, bir iş parçacığının diğer iş parçacıklarının başlatılmış durumuna bakmasını önleyen geçici bir değiştirici kullanabilirsiniz. Uçucu bir değiştirici, başka herhangi bir iş parçacığı okuyabilmeden önce bir iş parçacığında yazmanın gerçekleştiği, önce olur ilişkisi üzerinde çalışır.
Mutlaka Okuyun: Yeni Başlayanlar İçin İlginç Java Projesi Fikirleri
Çözüm
Singleton sınıfları, veritabanına veya sınıfın yöntemlerini ve örneklerini kontrol etmek istediğiniz herhangi bir programa özelleştirilmiş bağlantılar yapmak için kullanılır.
Java becerilerinizi geliştirmek istiyorsanız, bu java projelerine el atmanız gerekir. Java, tam yığın geliştirme hakkında daha fazla bilgi edinmek istiyorsanız, upGrad & IIIT-B'nin Yazılım Geliştirmede Yönetici PG Programına göz atın - Çalışan profesyoneller için tasarlanmış ve 500+ saatlik zorlu eğitim sunan Tam Yığın Geliştirmede Uzmanlık , 9 + projeler ve görevler, IIIT-B Mezun statüsü, pratik uygulamalı bitirme projeleri ve en iyi firmalarla iş yardımı.