Tasarım Desenleri Türkçe Kaynak
  • Başlarken
    • 👋Giriş ve Tanışma
  • Nesne Yönelimli Programlama
    • Nesne Yönelimli Programlama Nedir ?
  • S.O.L.I.D
    • S.O.L.I.D Nedir?
  • Tasarım Desenleri
    • Tasarım Deseni Nedir ?
      • Creational (Oluşturucu) Tasarım Desenleri
        • 💎Singleton
        • 🏭Factory
        • 🏭🏭 Abstract Factory
        • ⛏️ Builder
        • 🐑Prototype
      • Structural (Yapısal) Tasarım Desenleri
        • 🔌Adapter
        • 🌉Bridge
        • 🌲Composite
        • 🎺Decorator
        • 📦Facade
        • 🌫️ Flyweight
        • 🔍Proxy
      • Behavioral (Davranışsal) Tasarım Desenleri
        • ⛓️ Chain of Responsibility
        • ⚔️Command
        • 🈂️ Interpreter
        • 🚶‍♂️ Iterator
        • 🗼Mediator
        • ↪️ Memento
        • 👓Observer
        • 🤔State
        • 💪Strategy
        • 📥Template
        • 🏃‍♀️ Visitor
  • Kapanış
    • Kapanış & Kaynakça
Powered by GitBook
On this page
  1. Tasarım Desenleri
  2. Tasarım Deseni Nedir ?
  3. Creational (Oluşturucu) Tasarım Desenleri

🏭Factory

Previous💎SingletonNext🏭🏭 Abstract Factory

Last updated 2 years ago

Factory tasarım deseni birbirleri ile ilişkili nesneleri oluşturmak için bir arayüz sağlar ve alt sınıfların hangi sınıfın örneğini oluşturacağına olanak sağlar.

Buradaki amaç istemci tarafından birbirleri ile ilişkili nesnelerin oluşturulma anını soyutlamak, istemci hangi sınıf örneğini alabileceğini bilebilir ama oluşturulma detayları bilmez. Detaylar yani nesnenin nasıl oluşturulacağı soyutlanır. Örneğin oluşturulan sınıfın Singleton olarak oluşturulması gibi.

C# Kod Örneği:

public class User
{
    // Burada bildirimin gideceği kullanıcıya
    // ait bilgiler bulunacaktır.
}
// UML diyagramındaki IProduct arayüzümüze denk gelmektedir.
// İlişkili sınıflarımız bu arayüzü uygulayacaktır.
interface INotify
{
    void SendNotification(User user);
}
// UML diyagramındaki ConcreteProduct sınıflarına denk gelmektedir.
class MailNotify : INotify
{
    public void SendNotification(User user)
    {
        // Mail gönderme operasyonu.
    }
}
// UML diyagramındaki ConcreteProduct sınıflarına denk gelmektedir.
public class SmsNotify : INotify
{
    public void SendNotification(User user)
    {
        // SMS gönderme operasyonu.
    }
}
// UML diyagramındaki ProductFactory sınıfına denk gelmektedir.
class NotifyFactory
{
    public INotify CreateNotify(string notifyType)
    {
        if (notifyType == "SMS")
        {
            // Buradaki nesne oluşturma süreçleri bize kalmıştır.
            // Kullanıcıdan soyutlanmıştır.
            // Örnek olarak burası Singleton olarak da ayarlanabilirdi.
            return new SmsNotify();
        }
        else if (notifyType == "MAIL")
        {
            // Buradaki nesne oluşturma süreçleri bize kalmıştır.
            // Kullanıcıdan soyutlanmıştır.
            // Örnek olarak burası Singleton olarak da ayarlanabilirdi.
            return new MailNotify();
        }
        return null;
    }
}
NotifyFactory notifyFactory = new NotifyFactory();

INotify notify = notifyFactory.CreateNotify("MAIL");

notify.SendNotification(new User());

Yukarıdaki kodda da görüldüğü gibi INotify arayüzünü uygulayan sınıfların oluşturulması istemciden soyutlanmıştır.

Bu tasarım deseninin JAVA ve diğer diller için olan uygulamasını bulabilirsiniz.

bu tasarım deseni için oluşturulmuş klasörde
factory-pattern