Ara:

Şu an misafir modundasın. YazılımDevi olmak ister misin? Giriş Yap / Kayıt Ol

Makale Hakkında!

Design Patterns - Singleton Makale Yazarı Okunma Sayısı Eklenme Tarihi
Veysel Uğur Kizmaz 1296 22.02.2009

Makale Detayı

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


Makale Tagları

Makale Dosyası

Makaleye Ait Dosya Bulunamamıştır

Paylaş


Yazar Hakkında
Genel Bilgiler   Yazar Hakkında
Ad: Veysel Uğur Kizmaz 1986 doğumlu Veysel Uğur Kızmaz, Gazi Üniversitesi Bilgisayar Mühendisliği bölümü mezunu, Ankara Üniversitesi Bilgisayar Mühendisliği bölümünde yüksek lisans öğrencisidir. Bir çok projede çalışmış olan yazarımız, şu an özel bir yazılım firmasında web tabanlı sistemler üzerinde çalışmalar yapmaktadır. Yazarımızın uzmanlaştığı alanlar .Net, Java, Php, Javascript, SQL Server, Oracle, MySQL, Sharepoint, Team Foundation Server, Biztalk, WCF, Test ve Modellemedir. Sertifikaları : MCTS
Kurum: Özel bir yazılım firması
Meslek: Yazılım Mühendisi
E-Mail: veysel@ugurkizmaz.com
Web Sitesi: http://www.ugurkizmaz.com
Makale-Video: 214

Bu makale için yapılmış yorumlar

Online çalışan bir yazılımda örneğin bir websitesinde connection gibi önemli bir nesne için singleton kullanırsak, bir süre sonra connection nesnesinde sorun çıkması olası bir durum değil midir? Sorun çıktığında ise bir daha nesne yaratamamak kendi kendini kuyuya atmak değil midir? Ahmet Soydaş 21.03.2011
Sorunuz için teşekkür ederim. Bu örnek uygulamayı anlaşılması kolay olduğu için verdiğimi belirterek sorunuzu yanıtlamak istiyorum. Eğer veritabanına az sayıda kullanıcı ile bağlanılacak ve işlem sayısı kısıtlı olacaksa Singleton faydalı olacaktır. Fakat geniş çaplı projelerde Singleton'ı bu işlem için kullanmak sıkıntı yaratır, bunun yerine Connection Pool yapısının kullanılması daha mantıklıdır. Connection nesnesinde sorun çıkması durumu ile ilgili sorunuza cevaben, Singleton yapısını kullanırken Veritabani.veritabaninial.Fonksiyon(); şekilde kullanmaktayız. Yani her işlemin başlangıcında veritabanı nesnemizin varlığını kontrol ediyoruz. Bu gereksiz kod çalıştırılması gibi düşünülebilir, yalnız sizin de dediğiniz gibi herhangi bir sorun çıkması durumunda veritabanı nesnemizi oluşturmaktadır. Veysel Uğur Kizmaz 21.03.2011
Cevabınız için teşekkür ederim. Fakat örneğinizde nesne hem Static hem de Single?? Bunun bir sebebi, bir önemi nedir acaba? Ahmet Soydaş 21.03.2011

Bu makale hakkında yorum yapınız!...

Bu makale hakkında yorum yapabilmek için lütfen üye olunuz veya giriş yapınız.

Konular

Yazarlar

Son Eklenen Makaleler

Son Eklenen Videolar

Ziyaretçi İstatistiği

ImageOnline : 7         Bugün : 1367

Bu Ay : 8198        Bu Yıl : 58372

Toplam : 441211

Kullanıcı Giriş Paneli!
E-Mail:
Şifreniz:
Giriş Yap

Şifremi Unuttum!
E-Mail:
    Gönder