Makale Kategorileri

Kendi Projelerim

Ücretsiz Programlar (4)

Web Siteleri (1)

Tavsiye Ettiklerim

Ücretsiz Programlar (5)

Ücretli Programlar (1)

Web Siteleri (5)

Programlama

Genel (1)

C# (4)

Javascript (3)

Perl (1)

Web Sitesi Yönetimi

Apache (1)

Bilgisayar Ağları (3)

Veritabanları (1)

Donanım (1)

Sağlık (1)

Genel (5)

Duyurular (1)

Singleton: Bir Sınıftan Sadece Bir Örnek Oluşturma

Sinan İLYAS 24 Şubat 2010 Çarşamba 19:04

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 kodlar
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#

Yorumlar

Bu makaleye henüz hiç yorum yapılmamış.

Yorum Yaz

İsim

E-Posta (Yayınlanmaz)

Yorum

Güvenlik Kodu

Güvenlik Kodu Güvenlik kodunu yenile

© 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.