Singleton
Singleton deseniyle tek örnek sınıf yazmayı öğrenirsin.
Singleton deseni
Singleton, bir sınıftan yalnızca tek örnek (instance) oluşturulmasını garanti eden desendir. Bunu üç parça sağlar: dışarıdan new ile örneklemeyi engelleyen özel kurucu (private Config()), tek örneği tutan statik alan (private static readonly Config _instance) ve bu örneği dışarıya açan statik özellik (public static Config Instance).
Sınıf sealed işaretlenirse alt sınıfların ikinci bir örnek yaratması önlenir. Statik alanlar C#'ta ilk erişimde tembel (lazy) başlatılır; bu yüzden basit Singleton için ek kilit gerekmez.
sealed ve tembel başlatma
sealed anahtar kelimesi sınıfı mühürler; alt sınıflar yeni örnek yaratamaz. Böylece Singleton'un tek örnek garantisi türetme yoluyla delinemez. C#'ta statik alanlar ilk erişildiği anda oluşturulur; bu tembel başlatma (lazy initialization) davranışıdır.
İfade gövdeli özellikle tek örneği döndürmek kısa ve nettir: public static Config Instance => _instance;. Burada => ok operatörü, özelliğin değerini hesaplayan tek satırlık ifadedir.
Uygulama Singleton Config sınıfını tanımla
sealed class Config tanımla. Özel kurucu (private Config()), static readonly _instance alanı, public static Config Instance özelliği ve string Greet() metodu ekle. Main'de Config.Instance.Greet() sonucunu yazdır.
Örnek çözümü göster
sealed class Config tanımla; private static readonly Config _instance = new Config(); public static Config Instance => _instance; private Config() { } public string Greet() => "Merhaba"; yaz. Main'de Console.WriteLine(Config.Instance.Greet());
Örnek çözüm:
using System;
sealed class Config
{
private static readonly Config _instance = new Config();
public static Config Instance => _instance;
private Config() { }
public string Greet() => "Merhaba";
}
class Program
{
static void Main()
{
Console.WriteLine(Config.Instance.Greet());
}
}
Kendini test et
-
Singleton deseninin temel amacı nedir?
- Tek örnek sağlamak ve genel erişim vermek
- Çok sayıda örnek oluşturmak
- Kalıtımı zorunlu kılmak
- Statik metodları gizlemek
Cevabı göster
Tek örnek sağlamak ve genel erişim vermek — Doğru. Singleton tek örnek garanti eder ve statik özellikle erişim verir.
-
İfade gövdeli özelliği tamamla
public static Config Instance ____ _instance;Cevabı göster
public static Config Instance => _instance; -
Singleton'da özel kurucu neden kullanılır?
- Sınıfı statik yapmak için
- Daha hızlı çalışmasını sağlamak için
- Dışarıdan new ile yeni örnek oluşturulmasını engellemek için
- Mirastan kazanılan metotları gizlemek için
Cevabı göster
Dışarıdan new ile yeni örnek oluşturulmasını engellemek için — Doğru. Özel kurucu dışarıdan new ile yeni örnek oluşturulmasını engeller.