Veysel Uğur KIZMAZ

Design Patterns - Singleton

16.06.2012Okunma Sayısı: 6736Kategori: Yazılım Mühendisliği

Design Patterns'a kisaca yazilim olusturma sirasinda sikça rastlanan sorunlari çözebilmek için uygulanan sablonlar diyebiliriz. Yazilimcilara nasil bir yapi olusturulacagi hakkinda öneriler sunar, yazilimcinin olusturacagi yapida en verimli ve sade yolu gösterir.

Design Patterns'in siniflandirmasina kisaca göz atacak olursak:

Creational Patterns:
Abstract factory
Factory method
Builder
Lazy Initiazilation
Object pool
Prototype
Singleton

Structural Patterns:
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy

Behavioral Patterns:
Chain of responsibility
Command
Interpreter
Iterator
Mediator
Momento
Null Object
Observer
State
Strategy
Spesification
Template method
Visitor


Creational Patterns'in bir üyesi olan Singleton desenini inceleyelim.

Singleton deseninde amaç, kendi türünden sadece bir tane örnek olusturmaktir. Bir diger deyisle, Singleton deseniyle olusturdugumuz sinif, olusturulan yerde sadece bir adet olabilir. Ayni türden ikinici degiskene izin vermez.

Örnek kodu asagidadir:

     public sealed class Singleton

    {
        static Singleton instance = null;
        private Singleton() { }
        public static Singleton Instance
        {
            get
            {
                if (instance == null) instance = new Singleton();
                return instance;
            }
        }
    }

Birinci dikkat edilmesi gereken nokta, constructor'in private ya da protected olarak tanimlanmasidir.

Nesneyi olusturmak için çagirilacak metod static olarak tanimlanmistir. Bu metod, bu türden bi nesne olusturulup olusturulmadigini kontrol eder. Olusturulmus ise eski degeri gönderir, olusturulmamis ise tanimalama islemini yapar.

Bu konuyu access veritabani baglantisi ile örneklendirelim. Veritabani uygulamasi yapacagimiz zaman en önemli nokta islemlerimiz için olabildigince az baglanti kurmaktir. Singleton deseninde bize bir nesne türünden sadece bir adet tanimlama yapmaya izin veriyorsa, baglanti sinifini Singleton deseniyle olusturup veritabani islemleri için çoklu baglanti olusturma ihtimalini ortadan kaldiririm.

Singleton deseniyle hazirladigim access veritabani baglantisi kodlari asagidadir. Namespace bölümüne using System.Data.OleDb; eklemeyi unutmayin.

     public class Veritabani

    {
        private static Veritabani db;
        OleDbConnection baglanti;
 
        private Veritabani()
        {
            baglanti = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=deneme.mdb");
        }
        public static Veritabani veritabaniniAl
        {
            get
            {
                if(db == null)
                    db = new Veritabani();
                return db;
            }
        }
    }

 

Veysel Ugur KIZMAZ