20.04.2023

17

Like

896

Views

SINGLETON DESIGN PATTERN

Design Pattern


TASARIM DESENİ(TASARIM KALIBI) NEDİR ?

Tasarım deseni, doğrudan koda dönüştürülebilen bitmiş bir tasarım değildir. Birçok farklı durumda kullanılabilecek bir sorunun nasıl çözüleceğine ilişkin bir açıklama veya şablondur.Hazır fonksiyonlar veya kütüphaneler gibi kopyalayıp kodunuza uygulayamazsınız. Model, belirli bir kod parçası değil, belirli bir sorunu çözmek için genel bir kavramdır.

Kalıplar genellikle algoritmalarla karıştırılır, çünkü her iki kavram da bilinen bazı sorunlara tipik çözümleri tanımlar. Bir algoritma her zaman bir hedefe ulaşabilecek net eylemleri tanımlarken, bir tasarım deseni bir çözümün daha üst düzey bir açıklamasıdır. İki farklı programa uygulanan aynı modelin kodu farklı olabilir.

YARATIMSAL TASARIM DESENLERİ (CREATIONAL DESIGN PATTERN)

Creational Design Pattern

Oluşturucu tasarım desenleri,kodun esnekliğini ve tekrar kullanılabilirliğini arttıran çeşitli nesne oluşturma mekanizmaları sağlar.

SINGLETON TASARIM DESENİ

Singleton

Singleton modeli, Single Responsibility Principle'ı ihlal ederek aynı anda iki sorunu çözer:

  • Bir sınıfın yalnızca tek bir örneği(instance) olmalıdır.Neden biri bir sınıfın kaç tane örneği olduğunu kontrol etmek ister ?Bunun en yaygın sebebi, örneğin bir veritabanı veya dosya gibi bazı paylaşılan kaynaklara erişimi kontrol etmektir.

Nasıl çalışır ?

Diyelim ki bir nesne oluşturdunuz,daha sonra başka bir yerde daha bu nesneye ihtiyacınız oldu ve yeniden yaratmaya karar verdiniz.Bu noktada size yeni bir nesne yerine var olan nesne dönecektir.

Bu davranış normal bir oluşturucu (constructor) ile mümkün değildir, çünkü tasarımı gereği oluşturucular her zaman yeni bir nesne döndürmek zorundadır.

Singleton

İstemciler her zaman aynı nesneyle çalıştıklarının farkında bile olmayabilirler.

  • Bu örneğe(instance) genel(global) bir erişim noktası sağlayın.Bazı önemli objeleri saklamak için kullandığımız global değişkenleri hatırlıyor musunuz ? Çok kullanışlı olsalar da güvenilir değildir çünkü herhangi bir kod bu nesnelerin üzerine yazılıp uygulamanızın çökmesine sebep olabilir.Singleton deseni de global değişkenler gibi nesneye istediğiniz yerden ulaşabilmenizi sağlar ve aynı zamanda nesnenizin üzerine kod yazılmasını da engeller.

Singleton deseninin tüm implementasyonları şu 2 adıma sahiptir :

  • Diğer nesnelerin singleton sınıfıyla new operatörünü kullanmasını engellemek için varsayılan constructor'ı özel(private) yapın.
  • Constructor olarak görev yapacak statik bir oluşturma metodu yazın. Aslında bu metod arka planda özel constructor’ı çağıracak ve bunu statik bir alana kaydedecektir. Bu metoda daha sonra gelen tüm çağrılar ön belleğe alınmış bu nesneyi döndürür.

Kodunuzun singleton sınıfına erişimi varsa singleton'ın statik metoduna da erişebilir.Bu metod her çağrıldığında aynı nesneyi döndürecektir.

UYGULANABİLİRLİK

  • Programınızdaki bir sınıfın tek bir nesnesi olması gerektiğinde singleton desenini kullanın;örneğin ,programın farklı bölümleri tarafından paylaşılan tek bir veritabanı nesnesi.

Singleton deseni private oluşturma yöntemi dışında nesne oluşturulmasını engeller.Bu yöntem ya yeni bir nesne oluşturur yada daha önce var olan nesneyi döndürür.

  • Global değişkenler üzerinde daha sıkı bir kontrole ihtiyacınız oldugunda singleton desenini kullanın

Global değişkenlerin aksine singleton deseni bir sınıfın her zaman bir instance'ı olacağını garanti eder.Bu sınırlamayı her zaman ayarlayabileceğinizi ve istediğiniz sayıda Singleton instance'ının oluşturulmasına izin verebileceğinizi unutmayın. Değiştirilmesi gereken tek kod parçası, getInstance yönteminin gövdesidir.

YAPI


SINGLETON

Desene ait yukarıdaki diyagrama bakacak olursak, örneğini istediğimiz sınıfın;

  1. Constructor (oluşturucu metotu) private olmalıdır. Bunun amacı nesne oluşumunu tek yerden sağlamak. İstemcinin, new anahtar kelimesini kullanması engellemektir.
  2. Static bir değişken olmalıdır, referansı tutmak için.
  3. Tutulan referansa erişmek için bir metot olmalıdır, getInstance()


ARTILARI EKSİLERİ

Singleton

Singleton deseni ile farklı kodlama türlerindeki örneklerini görmek için ;

https://refactoring.guru/design-patterns/singleton,

https://www.tutorialspoint.com/design_pattern/ linklerinden yararlanabilirsiniz.

Ayrıca daha detaya inerek farklı implementasyonları görmek için ;

https://www.geeksforgeeks.org/singleton-design-pattern/ adresinden inceleyebilirsiniz.


***Bu içerik

https://sourcemaking.com,https://refactoring.guru,https://www.geeksforgeeks.org

adreslerinden tercüme edilerek ve derlenerek oluşturulmuştur.Yazının devamında Factory tasarım deseninden bahsedeceğim,görüşmek üzere ...


Linkedin : https://www.linkedin.com/in/mina-dilek/


Java 102
Design Patterns
C# 101

Comments

You need to log in to be able to comment!

Mina Dilek

Location

İstanbul, TR

© 2021 Patika Dev

facebook
twitter
instagram
youtube
linkedin