sinan ilyas
Makale Kategorileri
Sevdiğim Sözler
Aptallar ne affeder ne unutur; saflar affeder ve unutur; akıllılar affeder ama unutmaz.
Thomas Stephen Szasz
Son Makaleler
Gazlı Bez Adı Nereden Geliyor?
Birbirlerinin Gözünden Programcılar ve Kullanıcılar
Denizlerimizde Avlanan Balıklar Ne Zaman Yenir?
Hangi Plastik Türleri Sağlığa Zararlı?
MAC Adreslerini Gösteren Program
Tüketici Sorunları Hakem Heyetlerinin Çalışma Usul Ve Esasları
Javascript ile Sonraki Sayfayı Otomatik Yükletme
VB6 hatası: 430 - Class does not support Automation or does not support expected interface
Tüm projenizde kullanacağınız bazı sınıflar olabilir. Örneğin, veritabanı bağlantısı için kullandığınız bir sınıftan, veya log kaydetmek için kullandığınız bir sınıftan, her sayfada ya da her formda ayrı ayrı yeni bir örnek oluşturmak istemeyebilirsiniz.
Singleton tasarım deseni ile bu mümkün. En özet şekilde anlatırsak, singleton tasarım deseni ile, bir sınıftan her ihtiyaç duyulduğunda yeni bir nesne oluşturulmaz; sadece ilk ihtiyaç duyulduğunda yeni bir nesne oluşturulup, daha sonra ihtiyaç duyulduğu durumlarda hep ilk oluşturulan nesne kullanılır.
Bir örnekle açıklayalım. Veritabanı bağlantısı için kullandığımız, Veritabani isimli bir sınıfımız olsun:
// Veritabanı bağlantısı için kullandığımız sınıf
public class Veritabani
{
/* Veritabanı bağlantısı için gerekli kodlar */
}
Şimdi bu sınıftan iki nesne oluşturalım:
// Veritabanı sınıfından bir örnek oluşturuldu Veritabani vt1 = new Veritabani(); // Veritabanı sınıfından başka bir örnek oluşturuldu Veritabani vt2 = new Veritabani();
Yukarıdaki kodda oluşturulan vt1 ve vt2 birbirinden bağımsız ayrı iki nesnedir. Hafızada ayrı ayrı yer işgal ederler.
Şimdi Veritabani sınıfımızdan sadece bir örnek oluşturulabilmesi için singleton tasarım deseni kullanalım:
public sealed class SingletonVeritabani
{
private static SingletonVeritabani _ornek = null;
private static readonly Object _kilit = new Object();
private SingletonVeritabani()
{
/* Yapıcı fonksiyon içinde çalıştırılacak kodlar */
}
// Daha önceden örnek oluşturulmuşsa, eski örneği döndürür.
// Daha önceden örnek oluşturulmamışsa, yeni örnek oluşturup, bu örneği döndürür.
public static SingletonVeritabani Ornek()
{
if (_ornek == null)
{
lock (_kilit)
{
if (_ornek == null)
{
_ornek = new SingletonVeritabani();
}
}
}
return _ornek;
}
}
Şimdi, bu sınıfı kullanalım:
// Veritabanı sınıfından bir örnek oluşturuldu Veritabani vt1 = SingletonVeritabani.Ornek(); // Veritabanı sınıfından yeni bir örnek oluşturulmadı // Önceden oluşturulmuş olan örnek vt2 değişkenine atandı Veritabani vt2 = SingletonVeritabani.Ornek();
Yukarıdaki kodda oluşturulan vt1 ve vt2 iki farklı nesne değil, aslında aynı nesnedir.
Singleton tasarım desenini yukarıdaki örnekteki gibi kullanırsanız, multithread uygulamalarda da güvenle kullanabilirsiniz.
Anahtar Kelimeler: visual studio, vs, visual studio 2005, visual studio 2008, vs2005, vs 2008, dotnet, .net, asp.net, c#, csharp, c sharp, singleton, tasarım deseni, design pattern, sınıf, class, instance, örnek, static, multithread, threadsafe
Kategori: Programlama > C#
Bu makaleye henüz hiç yorum yapılmamış.
© 1997- Sinan İLYAS
Site içeriği kaynak gösterilmeden kopyalanamaz.
Site tasarım şablonu Free CSS Templates sitesinden alınarak düzenlenmiştir.
Copyright © 2007 Ornate. All Rights Reserved. Designed by Free CSS Templates.