Singleton Tasarım Deseni ile Çalışma

Şubat 6, 2012

 

Tasarım desenleri (Desing Patterns)  uygulamalarımızdaki belirli kısımların oluşmasında hayati önem taşıyabilmektedir.Kullanmak zorundamıyız aslında hayır ama bu tasarım desenleri bizlere esneklik ve anlaşılır bir uygulama geliştirme ortamı sunmaktadır.Bir çok konuda hazır tasarım desenleri bulunmaktadır bu desenler genel olarak bir konuyu çözmek için bizlere en uygun yolu göstermektedir.Bu yazınında konusu olmasından dolayı Singleton tasarım deseninden bahsedelim.Singleton tasarım deseni : İlk olarak bizlere bir objenin birden fazla instance ‘ının oluşmasını engelleme garantisi vermektedir.Peki bunu nasıl yapıyor derseniz ilk aklımıza gelen soru şu olabilir : Bir sınıfın instance’ını new kelimesi ile oluşturup alabiliyorum peki Singleton tasarım deseni bunu nasıl engelleyecek ? Arkadaşlar ilk olarak şunu bilmemizde fayda var bir sınıfın instance’ını oluşturabilmek için o sınıfın public bir yapıcı method’unun (constructor) olması lazım eğer instance’ını almaya çalıştığınız sınıfın yapıcı method’u public değilse hata alırsınız.Singleton tasarım deseninin asıl işi de burada başlıyor diyebiliriz ilk olarak Singleton tasarım desinene uygun bir sınıf yazacaksak kesinlikle bu sınıfın yapıcı method’unun private olması lazım ki dışarıdan sınıfın instance’sı new kelimesi ile oluşturalamasın.Oluşturacağımız sınıf için birden fazla instance oluşamaz dedik buradan çıkarmamız gereken ise şudur : Bu tasarım deseni uygulandığı sınıf içerisinde kendi tipinde bir değişken tutuyor ve sınıfın instance ilk defa oluşturulduğu zaman bu değişkene o an oluşturduğu kendi instance’sini aktarıyor ve daha sonra ki çağrımlarda ise yeni bir instance oluşturmak yerine değişkene aktardığı kendi tipindeki instance’sını geri dönüyor bu geri dönme işlemini ise bizim yazacağımız bir method yardımı ile yapıyor.Buraya kadar bahsettiğimiz koşullara uyan bir Products sınıfı yazalım

 

 

 

 

Products adında sınıfımızın ilk olarak yapıcı method’unu private olarak yazıyoruz  daha sonra yine sınıfın kendisi tipinde (Products) bir static değişken oluşturuyoruz daha sonra sınıfımızın instance’sını geri dönecek olan method’umuzu yazıyoruz.Burada dikkat etmemiz gereken en önemli kısımlardan bir tanesi ise GetProductsInstance() method’umuzun içerisindeki if kontrolü burada static Products tipindeki değişkenimizin null olup olmadığını kontrol ediyoruz eğer bu değişken null ise daha önce bu sınıftan hiçbir instance alınmamış anlamına gelirki o zaman yeni bir tane instance yaratıp değişkenimize aktarıyoruz daha sonra bu değişkeni geri dönüyoruz.Burada bir soru işareti oluşması lazım aslında ? yazımızın ilk başında new kelimesi ile instance oluşturamayız demiştik Singleton tasarım desenini uygularken kodumuza peki burada nasıl izin verdi.Bunun sebebi arkadaşlar private bildiğiniz gibi sınıfın kendi içerisinde kullanımına izin verir sadece dışarıdan çağırımlara izin vermemektedir yani kendisini dışarıya kapatmaktadır biz o anda sınıfın kendi içerisinde olduğumuz için new kelimesi ile yeni bir instance alabiliriz ama asıl projenin içerisinde bir yerde bu şekilde new kelimesi ile Products sınıfının instance’ını alamayız.Bu şekilde Product sınıfının GetProductsInstance() method’u ilk defa çağrıldığında yeni bir instance oluşacaktır ve bir daha kesinlikle oluşmayacaktır.Lock kullanmamızın sebebi ise uygulamamızı thread safe hale getirmek istememiz.Bir uygulama üzerinden çalışacak iseniz bu işleme gerek kalmayacaktır ancak bir çok thread aynı anda bu sınıfı kullanmak isteyecekse uygulamalarınızda iste o zaman lock hayat kurtarabilir :)

 

 

Kullanım şekli

 

Singleton en kolay ama en çokta ihtiyaç duyulan bir tasarım desenidir.Gerekli yerlerde kullanarak uygulamanıza esneklik kazandırabilirsiniz.

 

İyi çalışmalar

posted in Desing Patterns by gokhan

Follow comments via the RSS Feed | Yorum yapın | Trackback URL

Leave Your Comment

*

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org