3 Eylül 2023 Pazar

Singleton Design Pattern Nedir ?

 

Singleton Design Pattern Nedir ?

Merhaba arkadaşlar bu yazımızda yazılımcılar tarafından en çok kullanılan tasarım kalıbı olan Singleton tasarım kalıbından bahsedeceğiz.Ama öncelikle çalışma mantığından bahsedelim.

Programlamada yaratılan her nesne ve değişken bellekte yer kaplar.Bazı nesneler vardır ki her istekte tekrar yaratılmasına ve bellekte yer kaplamasına gerek yoktur.Örneğin Db connection nesnesi veya Log nesnesi gibi. Her istek için ayrı ayrı bu nesneyi oluşturmak performans kaybına sebep olacaktır. Singleton ile oluşturulan nesneler tek bir örnek üzerinde kalır ve her istek bu örneği kullanır.

Signleton Design Pattern Kullanımı

Singleton design pattern deseninin 6 farklı şekilde kullanımı mevcut fakat ben en basit halini göstereceğim.Geri kalanlarına detaylı olarak buradan bakabilirsiniz.

En önemli kural burada Singleton ile ilgili sınıf dahilinde instance alınmasını önlemek, bu işlem için private ve protected access modifier ile classı tanımlayarak da yapılabilir fakat bizim isteklerimizden bir diğeri de yalnızca bir defa instance alınabilmesini sağlamak. O halde ilgili sınıfın içinde bir yerlerde nesnemizin oluşması gerekiyor. Bunu property veya statik bir metotla yapabiliriz.

Burada aslında en önemli noktalardan birinden bahsetmek istiyorum. Buradaki asıl amaç manuel olarak instance oluşturulmasını engellemek. Bu amaçla yola çıkarak Teksinif class’ımızın default constructor’unu private yapıyoruz ve ikinci bir instance oluşturulmasını engelliyoruz. Oluşturacağımız nesne sadece sınıf içerisinden oluşturulacağı için tek bir instance oluşturulmasını garantilemiş olacağız. Şimdi Teksinif class’ımızı görelim:

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.Text;

namespace Singleton
{
    public class SingleClass
    {
        private SingleClass()
        {
            Random r = new Random();
            deger = r.Next();
        }
        private static SingleClass _instance;
        private static SingleClass instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new SingleClass();
                }
                return _instance;

            }
            set
            {
                _instance = value;
            }

        }
        public int deger;
        public static SingleClass getInstance()
        {
            return instance;
        }
    }
}


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
using System;

namespace Singleton
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            SingleClass tek = SingleClass.getInstance();

            Console.WriteLine("\n Ilk Instance: {0}", tek.deger);

            SingleClass tek2 = SingleClass.getInstance();
            Console.WriteLine("\n Ikinci Instance: {0}", tek2.deger);
        }
    }
}

Göründüğü üzere yapıcı metodumuz private erişim belirleyicisi ile korunmakta. Burada altını çizmem gereken yapıcı metodumun içerisinde deger değişkenimi random bir sayı ile doldurmam yani Main metodumda iki adet getInstance yaptığımda tek bir nesne ile mi çalıştığımızı anlayabilmek için.

Main tarafında test etmek için getInstance metodunu kullandık ve degerlerini test ediyoruz. Çıktı aşağıdaki gibi olmalı yani sayılar eşit olmalı.

 

 

Umarım faydalı olmuştur.Bir sonarki yazımızda görüşmek üzere.

Yaralanılan Kaynaklar

Kaynak Kodu 

http://sehmusgokce.com/singleton-tasarim-deseni-design-pattern-nedir-ve-nasil-kullanilir-324.html 

http://www.ismailgursoy.com.tr/singleton-pattern-design-tek-nesneler/

 

Hiç yorum yok:

Yorum Gönder

.Net Core'da Swagger UI Kullanımı

  Web API geliştirirken API de yazılan metodların ne iş yaptığı? Hangi parametreleri aldığı? Ne cevap döndüğü? Gibi bilgilerin yer aldığı ...