MVCSHARP Ailesi ile yazılım geliştirmeye dair makaleler

Design Pattern(Java) Singleton

Singleton Design Pattern 

Tekniğe Göre Nesne örneğinin(Instance) bir kez alınacağını garanti altına alır.
Nesne örneklemek ram için maliyetli bir iştir.Bazı durumlar ' da nesne yi sadece bir kez ram e kaldırmamız gerekirse
başvuracağımız yazılım tasarımı kesinlikle Singleton Olmalıdır.

iş hayatım da bir takım durumlar ile karşılaştım bu konu ile ilgili,bazı meslektaşlarım static kavramını yanlış anlıyorlar.Ne alaka diceksiniz .d 
Static Fizik de hepimiz bildiği gibi durağan,değişim göstermeyen ve sabitlik kavramlarından gelmektedir.
Programlama için de static tanımı budur.

singleton ile static kavramını benzeten, singleton adı geçtiğinde 'tamam işte static gibi davranıyor' diyen meslektaşlarımda bu konu uzerinde tartışmıştım:D

Konuyu Dağıtmakta istemiyorum ama :D 
.Net İçin konuşursak .Net Framework için geçerli olan bir durumdan bahsetmek isterim çok kısa
.Net framework de static bir class, O class ı taşıyan bir Nesne ile örneklenemez...yani static bir class ın nesne örneğini alamayız .Net ' de.
(Java ' da Static Bir Class Yazmamız İçin Inner Class Mantığıyla Hareket Etmemiz Gerekir.)

peki .Net ' de Hangi Durumlarda Static Class ' lara Başvurmalıyız? 
ee Instance alamicağımıza göre demek ki Class içerisindeki property 'leri kullanmamam gerekicek.
Class İçindeki Property'leri kullanmicaksam o Class ımı Static olarak işaretleyebilirim.
Buna En İyi Örnek Math Sınıfıdır.Tüm Üyeleri Static tir.Tüm Üyeleri Static olan Bir Class ' ı static olarak işaretlememek cok ta mantıklı birşey değil.

zaten static olan bir class içine static olmayan bir üye tanımı yaptığınızda compile error alırsınız.

singleton


Static Class ' da Nesne Örneği Alınmaz , Fakat Benim Sadece Bir Kez Nesne Örneği Almam gerekiyor. 

Singleton Uygulayacağımız bir senaryo'da , Nesne Örneğinin Sadece Bir Kez Alınması İçin Neler Yapılır,beraber düşünelim

case one
        Nesne Örneğinin Alınma Sayısını bir sekilde kontrol altına almalıyım.Belki Böyle Birşey olabilir;

singleton


        hımm static int değişkenim her oluşan ınstance ın toplam sayısını bana veriyor.
        Ama nasıl olucak ta ben o static int değişkenime göre kontrol edip 1 e eşit veya büyükse Instance oluşmasını engellicem??
        
        Bunu Constructor dan önce calışan bir yerde yapmalıyım...Static constructor ' lar sadece bir kez çalışır ve diğer constructor'lardan önce calısır.
        Fakat sadece bir kez çalışacağı için her örneklemede static Constructor ' a girmeyecektir.Bunu bu yöntem ile kontrol edemem.
        sanırım Instance sayısını tutmak ve kontrol ifadelerine sokmak pek mantıklı bir fikir değil:D
    
case two
        Şunu Yapabilirim Nesne örnekleme Sayısını kontrol edemeyeceğime göre (ki bunu denedik:D) benim Nesne Örneklemeyi yasaklamam gerekiyor en başta.
        bunun icin private işaretleyicisi işimi görür, Private İle İşaretlenmiş bir constructor , nesne örneğini hiç almaz.
        
        singleton

        tamam artık nesne örneğinin alınmasını yasakladım.Ama tekniğe göre bir kez almam gerekiyor.
        O zaman Bu Class icinde static private bir Instance Alsam,
        Sonra yine class icinde static public bir method yazıp o private Instance ı, o Method İcinde Return etsem
        (

Ornek Almayı yasakladığım icin class icindeki metodlara Nesne Uzerinden Ulaşmam Gerekiyor Method O yuzden Static Olmalıdır.
Method Static Olduğu icin Private Olan Instance Nesnemde Static Olmalıdır.

        )
        
        Yani şöyle
        
        singleton
        
        Evet Buraya Kadar Class İcindeki Class ' ın örneğini Döndürmeyi Başka bir metod üzerinden sağladık.
        Singleton Class ' ından 3 Tane Ayrı değişken tanımlayıp bunları Stack(yığın) bölgesine kaldırdık, ama sadece 1 Adet Instance Oluştuğunu Goruyoruz.

        Oda Singleton class'ı içindeki Private olan Instance işleminden gelmektedir.
        Singleton Class'ının Private Yapıcı Metodunda Yazdığımız bir Counter Sayesinde Kaç Kez Oraya Girdiğini Kontrol Etmiş Bulunmaktayız.
        Tabi bide Null Kontrolu yaparsak Singleton Olayını Halletmiş oluruz.
        
        
        
        singleton
        
        
        Kısa Notlar
        * Singleton İcin Kilit Nokta Yapıcı Metodun Private Olmasıdır.(Nesne Örneğinin Alınmasını Dısardaki Ortamlara Kapatmak İcin)
        * Singleton Uygulancak Yapı İcerisinde Set Edilemeyen Static ve aynı zamanda private olan , geri dönüş değeri Class'ın kendi olan bir property örneği Alıp o nesne ' yi Yine Class İçerisinde bulunan başka bir method yardımı ile return Etmek.

        
        Bu Durumda Nesne Örneğinin sadece 1 kez alınacağını garanti altına almış oluruz.
        
        Saygılar Semih Sipahi 

Facebook Üzerinden Yorumlar