Ana içeriğe atla

Singleton Tasarım Deseni

Tasarım desenleri konusuna giriş yapanların belki de ilk öğrenmeye çalıştıkları konu singleton tasarım desenidir. Konuyla ilgili yazılım bloglarında, kitaplarda ve programlama derslerinde konu anlatılsa da eksik kalan bir kaç noktanın detaylı anlatılmaması konunun tam olarak kavranamamasına neden oluyor.

Bu anlamda Singleton tasarım desenine giriş yapmadan önce nesne yönelimli programlama konusuna hakim olmak, nesne ve örneğinin oluşturulması, multi-thread çalışma mantığını anlama ve lock, static anahtar kelimelerinin kullanımına hakim olmanız gerekiyor. Hangi programlama dili kullandığınızdan bağımsız olarak bu tanımlamalar hemen hemen tüm nesne yönelimli programlama dillerinde aynıdır.

Nesne yönelimli programlamada en maliyetli süreçlerden bir tanesi yeni nesne üretimidir. Aynı zamanda özellikle multi-thread uygulamalarda static kelimesinin yanlış kullanılması büyük problemlerin ortaya çıkmasına neden olabilir. Günümüz uygulamalarının çoğunun multi-thread çalıştığını da göz önünde bulundurursak (Örneğin istisnalar hariç web uygulamaları her request için yeni thread açarak çalışacak şekilde tasarlanmıştır) bir nesnenin tek örneğini oluşturmak için singleton tasarım desenini bile uygulamaya çalıştığınızda bir kaç kopya üretmeye kalkıp sürekli kopya üretme noktasına gelebilirsiniz.

Singleton Tasarım Deseni


Singleton tasarım kalıbı özü itibari ile kullanıldığı sınıflarda static kelimesinin kullanımını düzenler ve programın yaşam süresince belirli bir nesneden sadece bir örneğin(instance) olacağını garantiler. Aynı zamanda bu desen, yaratılan tek nesneye ilgili sınıfın dışından global düzeyde mutlaka erişilmesini hedefler. Özellikle multi-thread uygulamalarda bir nesnenin tek örneğinin oluşturulması da tasarım desenin diğer bir özelliğidir. Konuyu anlatabilmek açısından kod örneği ile devam edelim.

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    static Singleton()
    {
    }

    private Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}

Yukarıdaki kod lock anahtar kelimesi kullanmadan multi-thread uygulamalarda nesnenin tek kopyasının üretileceğini garanti eden kodlardır. Uygulaması ise burada Singleton olarak tanımlanan sınıfın yerine kendi sınıfınıza sınıf içerisindeki kodları eklemekle mümkün olacaktır. Bu kodları anlamanız ise tamamen nesne yönelimli programlamayı, thread-safe mantığını anlamayı gerektirir. Bu yüzden bu kodlar size çok uzak geliyorsa öncelikle nesne yönelimli programlama mantığını anlamayı deneyin.

Son olarak Singleton tasarım deseni yukarıda tanımlansa da tüm sınıflarda bu şekilde kodların yazılması da zahmet verici bir iştir. Bu yüzden uygulamalarda sizi bu zahmetten kurtaracak Generic Singleton Pattern de tasarlanmıştır. Konunun detayına buradan erişebilirsiniz.

Yorumlar

Bu blogdaki popüler yayınlar

Medyan (Ortanca) Nedir? Nasıl Hesaplanır? Nerelerde Kullanılır?

Medyan işlemi olasılık hesaplamalarında sıkça kullanılan bir sayı dizisinin ortalamasını hesaplamak için alternatif yöntemlerden bir tanesidir. Ortanca medyan işleminin diğer adıdır. Matematiksel olarak medyan işlemi bir sayı dizisi küçükten büyüğe sıralayarak ortada kalan elemanı medyan değeri olarak belirleme işlemidir. Örnek verecek olursak: 2, 1, 5, 4, 5, 1, 2, 3, 5 serisi sıralanırsa 1, 1, 2, 2, 3, 4, 5, 5, 5 serisi elde edilir. Bu seri 9 elemanlı olduğundan ortadaki, yani 5. eleman (medyan) olacaktır. 5. eleman 3 sayısıdır. Yani ortanca değeri 3'dür Eleman sayısı tek sayı olan bir seride medyan değerin sırasının hesaplaması şu şekilde formüle edilir. Medyanın Sırası = (Eleman Sayısı + 1) / 2 Bu formülü yukarıdaki örneği uygulayacak olursak; Medyanın Sırası = (9 + 1) / 2 = 5 Veri serisi eleman sayısı bir çift sayı ise bu durumda serinin 2 medyanı olacaktır. Örneğin 2, 1, 5, 4, 5, 1, 2, 3, 5, 4 serisi sıralandığında 1, 1, 2, 2, 3, 4, 4, 5, 5, 5 s

Ağaçlar Kireçle veya Badana İle Neden Boyanır?

Ağaçlar kireçle boyanmasının veya badana yapılmasının hem çevreye hem de doğaya, ağaçlara faydası var. Bu makalede bu geleneği enine boyuna tartışmaya çalıştık. Ağaca zarar veren mikrop ve bakterileri öldürür. Ağacı çok aşarı soğuk havalarda ve çok aşırı sıcak havalarda korur. Ağacın çürümesini ve kurtlanmasını önler. Ağacın gövdesinin alabileceği zararları en az düzeyde düşürmeyi sağlar. Hoş, güzel, hijyenik, temiz pırıl pırıl bir görüntü oluşturur. Ayrıca çok sıcak havalarda da ağacı yanmaya karşı korumak. En büyük etkisi soğuk havalarda ağacı don vurmalarına karşı korumak . Küresel ısınma göz önüne alındığında mevsim değişiklikleri ani don, ani ısı artışları ve azalışları sonucunun doğuracağı etkenler için yararlı etkin bir yöntem. Gövdeden obur dalların çıkmasını azaltmak için sürülür. Kireçleme ağaçları güneş yanığından korumak için yapılıyor. Ağaçlar da güneşten yanabiliyorlar. Bu arada odun dokudaki gözenekleri doldurarak kapattığı için, zararlıların yuv

Azərbaycan Dilində Vurğu Qəbul Etmeyen Şekilçiler

Sözlərdə hecalardan birinin digərlərinə nisbətən daha qüvvətli deyilməsinə heca vurğusu deyilir. Üzərinə vurğu düşən hecaya isə vurğulu heca deyilir. Azərbaycan dilində vurğu adətən söz sonuna düşür. Söz şəkilçi qəbul ederkən vurğu adətən şəkilçinin üzərinə keçir. Məsələn: çiç ə k - çiçəkl ə r - çiçəklərd ə n məkt ə b - məktəbl i - məktəblil ə r - məktəblilərd ə n Buna baxmayaraq dilimizdə bir sıra şəkilçilər var ki onlar vurğu qebul etmirlər. Bu məqalədə Azərbaycan dilində vurğu qebul etməyən şəkilçilər incələnəcək ve bu şekilçilərin hansı hallarda vurğu qebul edib hansı hallarda vurğu qebul etmediyi araşdırılacaqdır. Eyni zamanda bildirmək istəyirəm ki vurğu ilə bağlı daha geniş və ətraflı məlumat üçün Azərbaycan Dilində Vurğunun Praktik Məsələləri adlı məqaləyə də nəzər yetirə bilərsiniz.  1. İsimlərdəki şəxs(xəbərlik) şəkilçiləri Məsələn: müəli'məm müəli'msən müəli'mdir müəli'mik müəli'msiniz müəli'mdirlər Qeyd: -dır4