Yazılım

Factory Method Tasarım Deseni ve Uygulama Örneği

Kodnova 06 June 2026 10 görüntülenme
Factory Method Tasarım Deseni ve Uygulama Örneği

Factory Method deseninin temel amacı, nesne oluşturma süreçlerinin genişletilmesini ve modifiye edilmesini kolaylaştırmaktır. Bu desen, hangi nesne örneğinin oluşturulacağını belirleme sorumluluğunu alt sınıflara atar. Bu şekilde, programın geri kalanı, özel sınıflar hakkında bilgi sahibi olmadan üretilen nesneleri kullanabilir. Factory Method deseninin temel amacı, nesne oluşturma süreçlerinin genişletilmesini ve modifiye edilmesini kolaylaştırmaktır. Bu desen, hangi nesne örneğinin oluşturulacağını belirleme sorumluluğunu alt sınıflara atar. Bu şekilde, programın geri kalanı, özel sınıflar hakkında bilgi sahibi olmadan üretilen nesneleri kullanabilir.

ESNEKLİK

Factory Method deseni, farklı türdeki loglama süreçlerinin loglama işlemine kolayca entegre edilmesini sağlar. Örneğin, sisteminize dosya loglama veya konsol loglama eklemek istiyorsanız, yalnızca yeni bir Logger türevi oluşturmanız ve factory metodunu buna göre genişletmeniz yeterlidir.

SOYUTLAMA

Logger nesnelerinin oluşturulma süreci, LoggerFactory sınıfı içinde kapsüllenmiştir. Bu, loglama işlemlerini gerçekleştiren kodun geri kalanının, logger nesnelerinin nasıl oluşturulduğu veya hangi türe ait olduğu hakkındaki detaylara maruz kalmamasını sağlar.

BAKIM KOLAYLIĞI

Yeni bir loglama türü eklendiğinde veya mevcut loglama yöntemleri değiştirildiğinde, değişiklik yapılması gereken tek yerler LoggerFactory ve ilgili Logger türevleridir. Bu, kodun genişletilebilirliğini ve bakımını kolaylaştırır.

UYGULAMA ÖRNEĞİ

ILogger arayüzü, tüm logger tipleri için ortak bir arayüz tanımlar. Bu arayüzde asenkron olarak mesaj loglama işlevi (log) yer alır. Bu metot, türetilmiş sınıflar tarafından gerçekleştirilecek olan asıl işlemdir.


/// 
/// Defines a common interface for all logger types.
/// 
public interface ILogger
{
    /// 
    /// Logs a message asynchronously.
    /// 
    /// Message to be logged.
    Task log(string message);
}

ConsoleLogger sınıfı, ILogger arayüzünü implemente eder ve konsola loglama yapar. Loglanacak mesajın yanı sıra, mevcut tarih ve saat de ekrana basılır.


    /// 
    /// Implements logging to the console.
    /// 
    public class ConsoleLogger : ILogger
    {
        /// 
        /// Logs a message to the console along with the current date and time.
        /// 
        /// Message to log.
        public async Task log(string message)
        {
            Console.WriteLine(message + " Console Log Works " + DateTime.Now.ToString());
        }
    }

DatabaseLogger da ILogger arayüzünü uygular fakat bu sınıfın amacı veritabanına loglama yapmaktır. Ancak burada, gösterim amaçlı basit bir konsol çıktısı kullanılmıştır. Gerçek bir uygulamada, veritabanı işlemleri gerekecektir.


 /// 
    /// Implements logging to a database.
    /// 
    public class DatabaseLogger : ILogger
    {
        /// 
        /// Logs a message to the database log along with the current date and time.
        /// This is a stub for demonstration, as actual database logging would require database operations.
        /// 
        /// Message to log.
        public async Task log(string message)
        {
            Console.WriteLine(message + " DataBase Log Works " + DateTime.Now.ToString());  // Placeholder for actual DB logging
        }
    }

FileLogger sınıfı, dosyaya loglama işlevini gerçekleştirir. Bu örnekte de gerçek dosya işlemleri yerine konsol üzerinden simülasyon yapılır.


 /// 
    /// Implements logging to a file.
    /// 
    public class FileLogger : ILogger
    {
        /// 
        /// Logs a message to a file along with the current date and time.
        /// This is a stub for demonstration, actual file logging would involve file system operations.
        /// 
        /// Message to log.
        public async Task log(string message)
        {
            Console.WriteLine(message + " File Log Works " + DateTime.Now.ToString());  // Placeholder for actual file logging
        }
    }

LoggerType enum tipi, kullanılacak logger türlerini tanımlar: Konsol, Veritabanı ve Dosya. LoggerFactory sınıfı, istenen logger türüne göre uygun logger nesnesini yaratan bir fabrika görevi görür. CreateLogger metodu, parametre olarak aldığı LoggerType türüne göre ilgili logger nesnesini yaratır ve döndürür.


 /// 
   /// Defines the types of loggers available.
   /// 
   public enum LoggerType
   {
       Console,
       Database,
       File
   }

   /// 
   /// Factory class for creating logger instances based on the specified logger type.
   /// 
   public class LoggerFactory
   {
       /// 
       /// Creates and returns an instance of ILogger based on the specified LoggerType.
       /// 
       /// The type of logger to create.
       /// An ILogger instance of the specified type.
       public ILogger CreateLogger(LoggerType logType)
       {
           ILogger logger;
           switch (logType)
           {
               case LoggerType.Console:
                   logger = new ConsoleLogger();
                   break;
               case LoggerType.Database:
                   logger = new DatabaseLogger();
                   break;
               case LoggerType.File:
                   logger = new FileLogger();
                   break;
               default:
                   logger = new ConsoleLogger(); // Default to console logger if an unknown type is specified
                   break;
           }
           return logger;
       }
   }

Programın ana bölümünde, LoggerFactory sınıfından bir nesne yaratılır ve sürekli olarak DatabaseLogger tipinde loglar yaratılır. Her loglama işleminden sonra 2 saniye beklenir. Bu süreç, sürekli olarak devam eder. Bu örnek, Factory Method tasarım deseninin nasıl kullanılabileceğini ve farklı durumlar için nasıl esnek yapılar oluşturulabileceğini gösterir. Her logger türü için ayrı bir sınıf tasarlamak ve bir fabrika aracılığıyla bu türleri yaratmak, kodun genişletilebilirliğini ve bakımının kolaylığını artırır.


#region Factory Method Design Pattern Works PROGRAM.CS

var message = "Important Message Included";
while (true)
{
    var loggerfactory = new LoggerFactory();
    var logger = loggerfactory.CreateLogger(LoggerType.Database);
    await logger.log(message);
    Thread.Sleep(2000);
}

#endregion

Benzer İçerikler

Abstract Factory Tasarım Deseni ve Uygulama Örneği
Yazılım

Abstract Factory Tasarım Deseni ve Uygulama Örneği

Abstract Factory Tasarım Deseni ve Uygulama Örneği

Kodnova 06 June 2026
Chain Of Responsibility Tasarım Deseni ve Uygulama Örneği
Yazılım

Chain Of Responsibility Tasarım Deseni ve Uygulama Örneği

Chain Of Responsibility Tasarım Deseni ve Uygulama Örneği

Kodnova 06 June 2026
Adapter Tasarım Deseni ve Uygulama Örneği
Yazılım

Adapter Tasarım Deseni ve Uygulama Örneği

Adapter Tasarım Deseni ve Uygulama Örneği

Kodnova 06 June 2026
Hemen iletişime geç