24.08.2017

Singleton Tasarim Deseninin(Pattern) C# ile Gerçeklestirilmesi

Creational Design Pattern’lardan olan (Yani nesneleri olusturmak için tasarlanmis tasarim desenleri de diyebiliriz) Singleton adindan da anlasilacagi gibi tek bir nesne olusturmaya izin veren bir yapidir. Yani programin baslangicindan bitisine kadar RAM üzerinde olusturdugumuz static bir nesne ile çalisip bütünlügü arttirmaya çalisiyoruz. Peki nerelerde kullanilir bu Singeleton Tasarim Deseni diye soracak olursaniz, Loglama islemleri, DB transactionlari, file islemleri gibi bir çok yerde kullanilabilmektedir. 

 

Bu tasarim deseninde amaç ayni sinif üzerinde çalisilmasidir. Örnegin bir araba sinifimiz olsun.


Resim-2

Nesne yönelimli programlama ilkesine göre sinifi kurmak için “new” ifadesi kullanilip, constractor ile sinif kurulur. Fakat tasarim desenimizde sinifin constractor ile kurulmasini engelleyecegiz ve new ifadesi ile sinifi kuramayacagiz. Sinifimizi class içinde kurup disari gönderecegiz.


Resim-3

Burada öncelikle static ifadeli bir instance tanimladik bunu static tanimlamamizin sebebi ise static ifadelerin sinif kurulmadan çalistirilabilmesidir. Bir adet de static constractor tanimladik ve instance ile sinifi içerisinde kurduk. Static constractor sadece sinif kuruldugunda çalisir ikinci bir kurulumda çalismaz. Ayni zamanda yazmis oldugumuz constractor private yani disardan görünmeyecek sekilde yazilmistir. Kurulan sinifin disariya açik olup kullanilabilmesi için property yazdik ve sadece deger döndüren get blogunu aldik. Böylece sinifi disardan sadece bir kere kurabilir ve kullanabiliriz. Kurulumunu ise söyle yapiyoruz.


Resim-4

Burada kurulumu new ifadesi ile degil static degerlerin gönderdigi kurulum ile yapmaktayiz. Burada iki adet araba tanimladim ve arabalardan birincisinin degerini verdim. Tanimladigim ikinci araba degerine marka yazmadigim halde araba markasi birinci araba ile ayni olarak ekrana yazildi.


Resim-5

Bunun sebebi ise sinif örneginin bir kez olusturulmus olmasidir. Bu sinif örnegini nerede çagirirsaniz çagirin verdiginiz deger ayni kalacaktir. Normal sartlarda bir sinif kurulurken new ifadesi ile sinif içerisinde bulunan field degerleri de otomatik olarak kurulmakta ve varsayilan deger almaktadir. Ancak bu tasarim deseninde sinifi içerde kurdugumuz için degerler ayni kalacaktir.

Bu tasarim deseninin kullanildigi bazi alanlara örnek verecek olursak loglama mekanizmalarinda veya bazi servis çalismalarinda kullanilabilir.

Tekrar görüsmek dilegiyle iyi çalismalar