Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitmen tarafından sunulan programlama eğitim içeriğidir. Eğitmen, singleton tasarım deseninin ne olduğunu, avantajlarını ve Java'da nasıl uygulanacağını anlatmaktadır.
- Video, singleton tasarım deseninin temel prensiplerini açıklayarak başlıyor, ardından loglama sınıfı örneği üzerinden uygulamalı bir gösterim sunuyor. Eğitmen, singleton'ın hangi durumlarda kullanılabileceğini, multi-threadli ortamlarda race condition sorununu ve bunun nasıl çözüleceğini test ederek anlatıyor. Son olarak, singleton sınıfının thread safe hale getirilmesi için senkronize anahtar kelimesinin nasıl kullanılacağını gösteriyor.
- Videoda ayrıca singleton'ın global access sorunlarına dikkat çekiliyor ve state bulunduran class'ların singleton olarak tercih edilmesi gerektiği vurgulanıyor. Eğitmen, thread'lerin senkronize bloklar içinde nasıl çalıştığını ve aynı objenin birden fazla thread tarafından nasıl kullanılabileceğini örneklerle açıklıyor.
- 00:00Singleton Tasarım Deseni Tanıtımı
- Singleton tasarım deseni, bir sınıfın uygulamanın süresi boyunca sadece bir tane instance oluşturmasını sağlayan bir tasarım desenidir.
- Bu tasarım deseninin avantajları ve Java'da nasıl uygulanacağı bu videoda ele alınacaktır.
- 00:21Singleton Tasarım Deseninin Motivasyonu
- Web uygulamalarında her istek geldiğinde loglama yapmak veya servis sınıflarında çıktıları loglamak gibi durumlarda tek bir logger class'ı kullanılmalıdır.
- Her yerde tekrar tekrar logger instance'ı üretmek, memory tüketimi açısından ve uygulamanın sağlığı açısından mantıklı değildir.
- Sadece hizmet alan, içinde state değiştirmeyen ve sadece metotlar kullanan class'lar için singleton tasarım deseni kullanılabilir.
- 01:42Singleton Tasarım Deseninin Özellikleri
- Singleton tasarım deseninde uygulamanın life cycle boyunca sadece tek bir instance bulunur.
- Lazy initialization kullanılarak sadece ihtiyaç duyulduğunda obje üretilir ve aynı obje tekrar tekrar kullanılır.
- Multi-threading işlemlerinde singleton tasarım deseninin doğru uygulanması gerekir.
- 02:38Singleton Tasarım Deseninin Kullanım Alanları
- Spring Boot gibi framework'lerin oluşturduğu binlerin (repository, object mapper) singleton olarak oluşturulması gerekir.
- Object mapper, class'ları serialize etmek için kullanılır ve sadece bir metod kullanılır.
- Log class'ları gibi sadece metotları kullanılan ve uygulamanın her tarafında kullanılacak class'lar için singleton tasarım deseni kullanılabilir.
- 03:23Singleton Tasarım Deseninin Kullanım Alanları
- DTO'lar (Data Transfer Objects) singleton tasarım deseninde kullanılmaz çünkü objelerin kendine has alanları ve state'leri olmalıdır.
- Model class'ları için singleton tasarım deseni kullanılmamalıdır.
- 04:00Singleton Class'ların Özellikleri
- Singleton class'larından sadece uygulamanın süresi boyunca tek bir instance oluşur.
- Global access söz konusu olduğundan, singleton class'larının alanları değiştirildiğinde diğer class'lar etkilenebilir.
- State bulunduran class'lar genellikle singleton olarak tasarlanır.
- 05:45Singleton Tasarım Deseninin Java'da Uygulanması
- Java'da singleton tasarım deseni uygulamak için bir logger class'ı oluşturulabilir.
- Logger class'ına "public void log" adında bir metod eklenebilir.
- Normal kullanımda her yerde "new logger" ile yeni instance'lar oluşturulduğunda, uygulamada yüzlerce logger instance'ı oluşabilir.
- 08:43Singleton Tasarım Deseni Uygulaması
- Logger sınıfının dışarıdan üretilmesini durdurmak için constructor'ı private'a çevirmek gerekiyor.
- Singleton tasarım deseninde, logger instance'ı private static olarak class içinde tutulmalı ve dışarıdan erişim için getInstance metodu oluşturulmalı.
- GetInstance metodu, instance null ise yeni bir logger instance'ı oluşturur (lazy initialization), aksi halde mevcut instance'ı döndürür.
- 11:58Singleton Tasarım Deseninin Test Edilmesi
- Singleton tasarım deseni uygulandığında, logger'a erişmek isteyenler getInstance metodunu kullanarak aynı objeye ulaşmalıdır.
- Test sırasında, logger1 ve logger2 metodları aynı logger instance'ını döndürmelidir.
- Singleton tasarım deseni, uygulamanın life cycle boyunca sadece tek bir logger instance'ı bulunmasını sağlar.
- 13:19Multi-Threading ve Race Condition Sorunu
- Multi-threading işleminde getInstance metoduna aynı anda erişim yapıldığında race condition oluşabilir.
- Test için logger constructor'ına bir saniye bekleme eklenerek, iki thread aynı anda erişim yaparsa farklı instance'lar oluşturulması sağlanmıştır.
- Singleton tasarım deseni thread safe değil, bu nedenle test sonucunda iki farklı instance oluşmuştur.
- 17:30Thread Safe Singleton Tasarım Deseni
- Thread safe singleton tasarım deseni için getInstance metodu senkronize hale getirilmelidir.
- Senkronize blok içinde, instance null ise yeni bir logger instance'ı oluşturulur.
- Senkronize blok içinde tekrar instance kontrolü yapılmalıdır, böylece birden fazla thread aynı anda erişim yapamaz.
- 18:46Singleton Pattern ve Thread Safe Uygulama
- Thread bir önce geldi ve senkronize girdi, thread iki ise kapıda beklemek zorunda kaldı.
- Thread bir instance numlu kontrolü yaptıktan sonra obje oluşturma işlemini yaptı ve return instance diyerek dönebilir.
- Kapıda bekleyen thread iki geldiğinde instance artık null değil, başka bir thread tarafından oluşturulmuş olduğu için direkt return incce'ı dönüyor.
- 19:23Singleton Pattern'ın Avantajları
- Sadece obje oluşturma işlemini thread safe haline getirmiş olduk ve sadece bir defa obje oluşturulacak.
- Diğer gelen tüm thread'ler sadece o insana bir defa oluşmuş insana erişecek.
- Get instas'ı çağırdıklarında thread bir ilk defa geliyorsa objeyi oluşturacak ve daha sonra gelen tüm obje oluşturma işlemlerinde sadece o objeyi verecek.
- 20:08Test ve Sonuç
- Test birkaç defa çalıştırıldığında her seferinde geçtiğini görebiliyoruz.
- Şu anda bir singleton pattern'ını uygulamış olduk.
- Bu singleton pattern'ını da thread safe bir hale getirmiş olduk.