Singleton Design Pattern


Bu makalede aşağıdaki konulara değineceğim
1. Singleton Design Pattern Nedir?
2. Creational Pattern olarak Singleton
3. Uygulama Kuralları
4. Bir Singleton class' nasıl uygularız


Bu makale Design Patterns kategorisindeki birinci makale olan Tasarım Kalıplarına Giriş makalesinin devamıdır. Bu yüzden öncelikle Tasarım Kalıplarına Giriş adlı makaleyi okumanızı tavsiye ederim. 

Singleton Pattern, Creational Pattern türündendir. Tasarım Kalıplarına Giriş makalesinde belirtildiği gibi "Tasarım Kalıpları: Tekrar kullanılabilir Nesneye Yönelik Yazılımın Temelleri" kitabının yazarları ilgili kitapta Creational Design Pattern kategorisine dahil olan beş Tasarım Kalıbı yayınladı. Singleton Pattern bunlardan biri olmak üzere diğer dört Tasarım Kalıbı;  Factory Pattern, Abstract Factory Pattern, Builder Pattern ve Prototype Pattern'dir.  Adından da anlaşılacağı gibi, Creational Design Pattern türü, nesne oluşturma mekanizmalarıyla ilgileniyor. Daha basit bir şekilde anlatmak istersek, Creational Design Pattern türü, nesnelerin belirli bir duruma uygun şekilde oluşturulmalarını sağlıyor.

Singleton Pattern'e  belirli bir sınıfın sadece bir nesnesinin örneklendiğinden emin olmamız gerektiği durumlarda ihtiyaç duyarız. Oluşturulan tek örnek, uygulamadaki eylemleri koordine etmekten sorumludur.

Yukarıda gösterilen şemaya bakarsanız, singleton olarak başlatılan bir nesneyi çağırmaya çalışan farklı nesneleri göreceksiniz. Nesnenin bu tek örneği, yöntemlerin veya olayların altında çağırmaktan sorumludur.

Singleton Uygulamasının Avantajları ve Kuralları

Kaynağa eş zamanlı erişim, Singleton Design Patten ile en iyi şekilde yönetilir.

  • Uygulama kurallarının bir parçası olarak, sınıfın tüm yapıcılarını özel olarak bildirerek sınıfın yalnızca bir örneğinin oluşturulması nın sağlanması gerekmektedir.
  • Ayrıca, tekil erişimini kontrol etmek için, nesnenin tek bir örneğini döndüren bir statik özellik sağlanmalıdır

Singleton Sınıfı Uygulama Öğneği 
 

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// First version of Singleton demo
/// </summary>
namespace SingletonDemo
{
class Program
{
static void Main(string[] args)
{
/*
* Singleton'ın employee class'tan oluşturulduğunu varsayarsak
* Singleton class'ının GetInstance özelliğine atıfta bulunuyoruz
*/
Singleton fromEmployee = Singleton.GetInstance;
fromEmployee.PrintDetails("From Employee");
/*
* Singleton'ın student class'tan oluşturulduğunu varsayarsak
* Singleton class'ının GetInstance özelliğine atıfta bulunuyoruz
*/
Singleton fromStudent = Singleton.GetInstance;
fromStudent.PrintDetails("From Student");
Console.ReadLine();
}
}
}

Singleton.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// İlk Singleton versionu
/// </summary>
namespace SingletonDemo
{
/*
*  Sealed Class. Sealed sınıflar kalıtım vermeyen sınıflardır. Bir sınıfın başka 
*  sınıflara kalıtım vermesini engellemek için sealed komutu kullanılır. Sealed 
*  classları bir çeşit güvenlik önlemi olarak düşünebiliriz.
x
*/
public sealed class Singleton
{
private static int counter = 0;
/*
* Private property null olarak başlatılır.
* null kontrolü yapılarak nesnenin sadece bir örneğinin
* oluşturulması sağlanır.
*/
private static Singleton instance = null;
/*
* public property, private propert'den yararlanılarak classın sadece bir 
* örneğini döndürmek için kullanılır.
*/
public static Singleton GetInstance
{
get
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
/*
* Private constructor,, nesnenin sınıfın kendisinden başka bir örneklem       
* almamasını sağlar.
*/
private Singleton()
{
counter++;
Console.WriteLine("Counter Value " + counter.ToString());
}
/*
* Singleton instance aracılığıyla çağrılabilen Public metod
*/
public void PrintDetails(string message)
{
Console.WriteLine(message);
}
}
}

Bu Makaleyi Paylaş

Yorumlar (0)

Yorum Bırak