C#

Singleton Tasarım Deseni

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda Singleton tasarım desenini anlatacağım. Hadi başlayalım !

Aslında Singleton tasarım deseni C#’a özgü bir şey değil, nesne tabanlı tüm programlama dillerinde daha temiz kod yazmak için oluşturulan ve kabul görmüş olan tasarım desenlerinden bir tanesi fakat ben C# ile örneğini göstereceğim için bu yazıyı C# kategorisine aldım fakat siz Singleton tasarım desenini Java, Python, Dart gibi nesne tabanlı programlama dillerinde de kullanabilirsiniz.

Singleton tasarım deseni, bir sınıfın sadece bir örneğinin oluşturulmasını sağlar ve bu örneğe global bir erişim sağlar. Bu desen, bir uygulama içinde birden fazla örneğin istenmediği durumlarda kullanışlıdır. Bu makalede, C# programlama dili kullanarak Singleton tasarım deseni ile ilgili kod örnekleri sunacağız.

Singleton tasarım deseni kullanarak bir sınıf oluşturma

public sealed class Singleton
{
    private static Singleton instance = null;
    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }
}

Bu kod örneği, Singleton tasarım desenini kullanarak bir sınıf oluşturur. “private” erişim belirleyicisi, bu sınıfın yalnızca kendi sınıfında erişilebilir olduğunu belirtir. “static” anahtar kelimesi, sınıfın yalnızca bir örneğine izin verilmesini sağlar. “sealed” anahtar kelimesi ise, bu sınıfın başka bir sınıf tarafından kalıtım yoluyla genişletilemeyeceğini belirtir.

“instance” değişkeni, Singleton sınıfının yalnızca bir örneğini tutar. “Singleton()” yapıcısı, yalnızca bu sınıfın içinde çağrılabilir, bu nedenle başka bir sınıfın bu sınıfın örneğini oluşturması imkansızdır.

“Instance” özelliği, sınıfın yalnızca bir örneğinin oluşturulmasını sağlar. Bu özelliğin get yöntemi, sınıfın örneğinin var olup olmadığını kontrol eder. Eğer örnek oluşturulmamışsa, yeni bir örnek oluşturulur ve “instance” değişkenine atanır. Sonra bu örnek geri döndürülür.

Singleton tasarım deseni kullanarak bir dosya işleme sınıfı oluşturma

public sealed class FileManager
{
    private static FileManager instance = null;
    private static readonly object padlock = new object();

    private FileManager() { }

    public static FileManager Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new FileManager();
                }
                return instance;
            }
        }
    }

    public void ReadFile(string filename)
    {
        // Dosya okuma işlemleri
    }

    public void WriteFile(string filename, string text)
    {
        // Dosya yazma işlemleri
    }
}

Bu kod örneği, Singleton tasarım desenini kullanarak bir dosya işleme sınıfı oluşturur. “FileManager” sınıfı, yalnızca bir örneği oluşturulabilen bir sınıftır. “padlock” adında bir nesne, bu sınıfı içindeki “lock” ifadesinde kullanılır. “lock” ifadesi, içerisinde bulunan kod bloğunu kitleyerek farklı proseslerin o alana erişmelerini engeller ve bu sayede sınıfın aynı anda yalnızca bir örneği oluşturulabilmesini sağlar. “ReadFile” ve “WriteFile” metotları, dosya okuma ve yazma işlemlerini gerçekleştirir. Bu metotlar, sınıfın yalnızca bir örneği olduğu için herhangi bir senkronizasyon işlemi gerektirmez.

Singleton tasarım deseni kullanarak bir veritabanı bağlantısı oluşturma

public sealed class DatabaseConnection
{
    private static DatabaseConnection instance = null;
    private static readonly object padlock = new object();
    private SqlConnection connection = null;

    private DatabaseConnection()
    {
        connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        connection.Open();
    }

    public static DatabaseConnection Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new DatabaseConnection();
                }
                return instance;
            }
        }
    }

    public SqlCommand CreateCommand(string commandText)
    {
        return new SqlCommand(commandText, connection);
    }
}

Bu kod örneği, Singleton tasarım desenini kullanarak bir veritabanı bağlantısı oluşturur. “DatabaseConnection” sınıfı, yalnızca bir örneği oluşturulabilen bir sınıftır. “connection” değişkeni, SqlConnection sınıfından bir örnektir ve veritabanına bağlanmayı sağlar. Bu değişken, sınıfın yapıcısında tanımlanır ve veritabanına bağlanılır. CreateCommand() metodu, bir SqlCommand örneği oluşturur ve bu örneği geri döndürür. Bu metot, sınıfın yalnızca bir örneği olduğu için herhangi bir senkronizasyon işlemi gerektirmez.

Sonuç olarak, Singleton tasarım deseni, bir sınıfın yalnızca bir örneğinin oluşturulmasını ve bu örneğe global bir erişim sağlanmasını sağlar. Bu desen, C# programlama dili ile kolayca uygulanabilir ve birçok farklı senaryoda kullanılabilir. Yukarıdaki kod örnekleri, Singleton tasarım desenini kullanarak bir sınıf, dosya işleme sınıfı ve veritabanı bağlantısı oluşturma işlemlerini göstermektedir.

Evet bu yazımızında sonuna geldik, Tüm C# yazılarımıza buraya, diğer tasarım desenlerine ise buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu