Singleton Design Pattern


Singleton Design Pattern

Object Oriented Programming de bazı temel tasarım desenleri vardır. Bunlardan biride “Singleton” tasarım kalıbıdır. Bu kalıp tek bir nesne kullanacağımız zaman bize kolaylık sağlamaktadır.
Bu tasarım kalıbı ile life cycle boyunca belirli bir nesneden sadece bir tane olmasını garanti eder. Eğer bu nesne yaratılmışsa, singleton sayesinde yeni bir yaratma yerine bu nesnenin referansı işaret edilir. Bu desende yalnızca tek bir nesne yaratılmak istendiği için ilgili sınıfta bu nesnenin oluşturulması gerekmektedir. Bu da static bir property ya da static bir metot ile sağlanır. Bu static metot, sınıfın kendi içinde oluşturduğu nesneyi geri dönüş değeri olarak dönecektir. Bu nesne yaratıldıktan sonra yine sınıfın içinde olan private elemanına atanacaktır.




Singleton tasarım kalıbı için en iyi örneklerden biri loglama yapısıdır. Yukarıda Singleton deseni ile oluşturulmuş class yapısını görmektesiniz. Şimdi kodlar üstünden singleton tasarım desenini inceleyelim.



Singleton tasarım kalıbının avantaj ve dezavantajlarına bakacak olursak;

Avantajları
  • ·         Nesne kontrolü sağlayarak diğer nesnelerin Singleton nesnelerinden kendi kopyalarını yaratmayı engeller. Böylece tüm nesnelerin yalnızca bir Singleton nesnesinden ulaşıldığından enim olunmasını sağlar.
  • ·         Sınıf yaratım sürecini kontrol etme ve değiştirme özelliğine sahip olduğu için esneklik sağlar.

Dezavantajları
  • ·         Diğer nesneler her referans istediğinde Singleton nesnesi önceden yaratılıp yaratılmadığını her seferinde kontrol edeceği için bu sisteme ek yük bindirir.
  • ·         Singleton nesnesi yaratılırken “new” kullanılamaz. Bazı durumlarda geliştiriciler kaynak koda erişemez ve sınıftan direk olarak bir nesne oluşturamazlar. Buda karmaşıklığa neden olabilir.
  • ·         Singleton nesnenin nasıl sileneceği belli değildir. Bellek yönetimi sağlayan dillerde Singleton kalıbı nesneyi deallocate edebilir çünkü referans olarak bir private tutar. C++ gibi diller de diğer sınıflar nesneyi silebilir fakat bu durum boşta kalan referansa neden olur.


Yorumlar