tasarım desenleri logo

Singleton(Tek Nesne) Tasarım Deseni

Merhaba arkadaşlar, daha önce tasarım desenlerine kabaca bir giriş yapmıştık. Bu yazımda ise yaratıcı tasarım desenlerinden Singleton (Tek Nesne) tasarım desenine bakacağız.

Tanım olarak Tek Nesne; bir sınıfın yalnızca bir örneğinin oluşturulmasını sağlayan yaratıcı bir tasarım modelidir.

Genellikle şu durumlarda kullanılır:

  • Paylaşılan bir kaynağa erişmek istiyorsanız,
  • Programınız içerisinde bir çok kısımda bir kaynağa erişim isteniyorsa,
  • Tek bir nesne örneklendirmek istendiğinde kullanılır.

Bunun en iyi örneklerinden birisi bazı bilgileri günlüğe kaydetmek için sistemin her bölümünde kullanılan bir Kaydedici’dir.

Örnek olarak ise sosyal medya uygulaması yapıyorsanız, kullanıcının her etkinliğini kayıt etmek durumundasınız.

Her bir etkinlik günlüğü için tekrar tekrar yeni bir Oturum örneği başlatmak yerine, tek bir örneğe sahip olup gerektiğinde bu örneğe erişmek daha iyi olur.

Yani farklı bir deyişle; gerektiğinde kullanıcı oturumlarını, yorumları, yayınları ve beğenileri günlüğe kaydetmek için aynı Oturum örneğini kullanmak daha iyidir.

Şimdi ise Python ile farklı eylemleri(etkinlikleri) kaydetmekle sorumlu Oturum sınıfını oluşturalım.

Python’da Tek Nesne yaklaşımını oluşturmanın en popüler yolu metaclass oluşturmaktır.

Metaclass bir sınıfın sınıfıdır. Şimdi kod örneğimize geçelim.

class Singleton(type):
  def _init_(cls, name, bases, attrs, **kwargs):
    super()._init_(name, bases, attrs)
    cls._instance = None

  def _call_(cls, *args, **kwargs):
    if cls._instance is None:
      cls.instance = super().call_(*args, **kwargs)
    return cls._instance

class Oturum(metaclass=Singleton):
    #some class
    pass

Bir de C#’da benim örneğimi inceleyelim.

TekNesneDeneme adıyla bir proje oluşturdum. Açılan projeye tekNesne adında bir sınıf ekledim. Singleton tasarım deseninin daha anlaşılır sade kodları aşağıdaki gibidir.

namespace TekNesneDeneme
{
    public class tekNesne
    {
        private static tekNesne tek = new tekNesne(); //örnekleme yapıyoruz.

        private tekNesne()
        {
            Console.WriteLine("Tek nesne sınıfının nesnesi bellekte oluşturuluyor.");
        }

        public static tekNesne nesneAl()
        {
            return tek; //nesneAl metodu çağırıldığında "tek" örneğimizi gönderiyoruz.
        }

        public string getKullaniciAdi()
        {
            return "Muhammed";
        }
        public string getSifre()
        {
            return "12345";
        }
    }
}

Program sınıfı içerisine de aşağıdaki kodları yazıyoruz.

namespace TekNesneDeneme
{
    class Program
    {
        static void Main(string[] args)
        {
            string kullaniciAdi = tekNesne.nesneAl().getKullaniciAdi();
            string sifre = tekNesne.nesneAl().getSifre();

            Console.WriteLine(kullaniciAdi);
            Console.WriteLine(sifre);

            Console.ReadLine();
        }
    }
}

Burada tekNesne sınıfının içerisinden kullanıcı adı ve şifreyi alıyoruz.

Umarım anlaşılır olmuştur.

Bunlara Göz Atmak İsteyebilirsiniz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir