C# Factory Design Pattern Nedir

Creational Desenlerden (Pattern) Factory Design Pattern 2 alt gruba ayrılır.

1. Factory Method

2. Abstract Factory

Client tarafındaki kodumuzu etkilemeden, factory design desenimizi kullandığımız kodda en az dokunuşla değişiklik yapmamıza izin verir.

Factory Method desenini kullanarak bir örnek yapalım. (interface kullanıyoruz.) Senaryomuz File ve DB sınıfları oluşturmak, log kayıtlarımızı veritabanına veya metin dosyasına yazdırmak olsun.

    public interface ILogger
    {
        void Log();
    }
    public class DB : ILogger
    {
        public void Log()
        {
            Console.WriteLine("Log DB ...");
        }
    }
    public class File : ILogger
    {
        public void Log()
        {
            Console.WriteLine("Log File ...");
        }
    }

Bu sınıflardan nesne oluşturacak Factory sınıfımızı tanımlayalım.

    public class Factory
    {
        public ILogger FactoryMethod()
        {
            //Create File or DB instance
            return null;
        }
    }

Sadece Factory Method deseni örneği(instance) ile işlem yapmak istediğimiz nesneyi çağırabiliriz. Örneğimizde (instance) nesne oluşturma işlemini gerçekleştirecek bir metot (FactoryMethod) bulundurucağız.

FactoryMethod metotunda File veya DB sınıfını oluşturabiliriz. Sınıfı belirlemek için metotun parametresine enum tipinde değer gönderilebilir.

    public class Factory
    {
        public enum LogType
        {
            DB = 1,
            File = 2
        }
        public ILogger FactoryMethod(LogType type)
        {
            //Create File or DB
            switch(type)
            {
                case LogType.DB:
                    return new DB();
                  
                case LogType.File:
                    return new File();
                default:
                    return null;
            }
        }
    }

Client tarafında kodumuzu tanımlayalım.

    class Program
    {
        static void Main(string[] args)
        {
            Factory factory = new Factory();
            ILogger DBLogger = factory.FactoryMethod(Factory.LogType.DB);
            ILogger FileLogger = factory.FactoryMethod(Factory.LogType.File);
            DBLogger.Log();
            FileLogger.Log();
            Console.ReadKey();
        }

    }

Kodun Son Hali :

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Factory factory = new Factory();
            ILogger DBLogger = factory.FactoryMethod(Factory.LogType.DB);
            ILogger FileLogger = factory.FactoryMethod(Factory.LogType.File);
            DBLogger.Log();
            FileLogger.Log();
            Console.ReadKey();
        }

    }
    public interface ILogger
    {
        void Log();
    }
    public class DB : ILogger
    {
        public void Log()
        {
            Console.WriteLine("Log DB ...");
        }
    }
    public class File : ILogger
    {
        public void Log()
        {
            Console.WriteLine("Log File ...");
        }
    }
    public class Factory
    {
        public enum LogType
        {
            DB = 1,
            File = 2
        }
        public ILogger FactoryMethod(LogType type)
        {
            //Create File or DB
            switch(type)
            {
                case LogType.DB:
                    return new DB();
                  
                case LogType.File:
                    return new File();
                default:
                    return null;
            }
        }
    }
}

Çıktı :

factory design pattern nedir c#
factory design pattern nedir c#

Tek bir nesne üzerinden istediğimiz sınıfın örneğini(instance) oluşturabiliyoruz.

Bir cevap yazın

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