CodeBlanks Logo Icon CodeBlanks

Özet - Tasarım desenleri

C# kursu · İleri seviye · Ders 66/83

Singleton, Factory ve Strategy'i birleştirerek bir ödeme sistemi yazarsın.

Beş deseni hatırla

Bu grupta beş desen gördük: Singleton tek örnek; Factory nesne yaratma; Strategy algoritma seçimi; Observer değişim bildirimi; Decorator sarmalayarak genişletme. Her desen farklı bir sorunu çözer; seçim soruna bağlıdır.

Şimdi iki derste bu desenlerden ikisini birleştireceğiz: önce Singleton + Factory, sonra Singleton + Observer. Amaç, desenlerin nasıl bir arada çalıştığını görmek.

Uygulama ConfigStore: Singleton + Factory

sealed class ConfigStore tanımla: özel kurucu, static readonly _instance alanı, public static ConfigStore Instance özelliği ve public string Create(string type) fabrika metodu olsun. Create metodu type parametresine göre "url" ise "https://example.com", "title" ise "Uygulama", aksi halde boş dize döndürsün. Main'de ConfigStore.Instance.Create("title") sonucunu yazdır.

Örnek çözümü göster
//example.com", "title" => "Uygulama", _ => "" }; yaz. Main'de Console.WriteLine(ConfigStore.Instance.Create("title"));
Örnek çözüm:
using System;

sealed class ConfigStore
{
    private static readonly ConfigStore _instance = new ConfigStore();
    public static ConfigStore Instance => _instance;
    private ConfigStore() { }

    public string Create(string type) =>
        type switch
        {
            "url" => "https://example.com",
            "title" => "Uygulama",
            _ => ""
        };
}

class Program
{
    static void Main()
    {
        Console.WriteLine(ConfigStore.Instance.Create("title"));
    }
}

Uygulama Logger: Singleton + Observer

sealed class Logger tanımla: özel kurucu, static readonly _instance, public static Logger Instance ve public event EventHandler<string> MessageLogged olsun. Log(string message) metodu MessageLogged?.Invoke(this, message) çağrısı yapsın. class LoggerMonitor kurucusunda Logger.Instance.MessageLogged olayına lambda ile abone olup "Kayıt: " + msg yazsın. Main'de new LoggerMonitor() oluştur ve Logger.Instance.Log("Sistem açıldı") çağır.

Örnek çözümü göster
sealed class Logger { private static readonly Logger _instance = new Logger(); public static Logger Instance => _instance; private Logger() { } public event EventHandler<string> MessageLogged; public void Log(string message) => MessageLogged?.Invoke(this, message); } tanımla. class LoggerMonitor { public LoggerMonitor() => Logger.Instance.MessageLogged += (s, msg) => Console.WriteLine("Kayıt: " + msg); } yaz. Main'de: var m = new LoggerMonitor(); Logger.Instance.Log("Sistem açıldı");
Örnek çözüm:
using System;

sealed class Logger
{
    private static readonly Logger _instance = new Logger();
    public static Logger Instance => _instance;
    private Logger() { }

    public event EventHandler<string> MessageLogged;
    public void Log(string message) => MessageLogged?.Invoke(this, message);
}

class LoggerMonitor
{
    public LoggerMonitor() =>
        Logger.Instance.MessageLogged += (s, msg) =>
            Console.WriteLine("Kayıt: " + msg);
}

class Program
{
    static void Main()
    {
        var monitor = new LoggerMonitor();
        Logger.Instance.Log("Sistem açıldı");
    }
}

Kendini test et

  1. Deseni kullanım alanıyla eşleştir

    Singleton
    Tek örnek garantisi
    Factory
    Nesne yaratma
    Strategy
    Algoritma seçimi
    Observer
    Değişim bildirimi
    Decorator
    Sarmalayarak genişletme
  2. Tek örnek garantisi hangi desenle sağlanır?

    • Observer
    • Singleton
    • Decorator
    • Strategy
    Cevabı göster

    Singleton — Doğru. Singleton tek örnek sağlar.

İleri seviye bölümündeki tüm dersler