Design Patterns‘a kısaca yazılım oluşturma sırasında sıkça rastlanan sorunları çözebilmek için uygulanan şablonlar diyebiliriz. Yazılımcılara nasıl bir yapı oluşturulacağı hakkında öneriler sunar, yazılımcının oluşturacağı yapıda en verimli ve sade yolu gösterir.

Design Patterns’ın sınıflandırmasına kısaca 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’ın bir üyesi olan Singleton desenini inceleyelim.

Singleton deseninde amaç, kendi türünden sadece bir tane örnek oluşturmaktır. Bir diğer deyişle, Singleton deseniyle oluşturduğumuz sınıf, oluşturulan yerde sadece bir adet olabilir. Aynı türden ikinici değişkene izin vermez.

Örnek kodu aşağıdadır:

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’ın private ya da protected olarak tanımlanmasıdır.

Nesneyi oluşturmak için çağırılacak metod static olarak tanımlanmıştır. Bu metod, bu türden bi nesne oluşturulup oluşturulmadığını kontrol eder. Oluşturulmuş ise eski değeri gönderir, oluşturulmamış ise tanımalama işlemini yapar.

Bu konuyu access veritabanı bağlantısı ile örneklendirelim. Veritabanı uygulaması yapacağımız zaman en önemli nokta işlemlerimiz için olabildiğince az bağlantı kurmaktır. Singleton deseninde bize bir nesne türünden sadece bir adet tanımlama yapmaya izin veriyorsa, bağlantı sınıfını Singleton deseniyle oluşturup veritabanı işlemleri için çoklu bağlantı oluşturma ihtimalini ortadan kaldırırım.

Singleton deseniyle hazırladığım access veritabanı bağlantısı kodları aşağıdadır. Namespace bölümüne usingSystem.Data.OleDb; eklemeyi unutmayın.

public class Veritabani

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