Factory deseni nedir? Ne zaman kullanılır?

Cevap

Factory, nesne oluşturma mantığını istemci kodundan ayıran yaratımsal (creational) bir desendir. İstemci hangi somut sınıfın oluşturulacağını bilmez, yalnızca ortak arayüzle çalışır.

Simple Factory

class Notifier:
    def send(self, to, msg): raise NotImplementedError

class EmailNotifier(Notifier):
    def send(self, to, msg): print(f"E-posta -> {to}: {msg}")

class SmsNotifier(Notifier):
    def send(self, to, msg): print(f"SMS -> {to}: {msg}")

class NotifierFactory:
    _registry = {"email": EmailNotifier, "sms": SmsNotifier}

    @classmethod
    def create(cls, channel: str) -> Notifier:
        try:
            return cls._registry[channel]()
        except KeyError:
            raise ValueError(f"Bilinmeyen kanal: {channel}")

notifier = NotifierFactory.create(user.preferred_channel)
notifier.send(user.contact, "Siparişiniz kargoda")

Varyasyonlar

  • Factory Method: oluşturma işi alt sınıflara bırakılır; üst sınıf create_notifier() metodunu çağırır, alt sınıflar hangi nesnenin döneceğini belirler.
  • Abstract Factory: birbiriyle uyumlu nesne aileleri üretir. Ör. LightThemeFactory hem Button hem Checkbox üretir, DarkThemeFactory de karanlık versiyonlarını.

Ne zaman?

  • Oluşturulacak sınıf çalışma zamanında belirleniyorsa (yapılandırma, kullanıcı tercihi).
  • Oluşturma karmaşıksa (birçok bağımlılık, ön ayar) ve tek yerde toplanmalıysa.
  • Yeni tür eklemenin istemci kodunu değiştirmemesi isteniyorsa (Open/Closed).

Tek bir somut sınıf varsa ve değişmesi beklenmiyorsa factory gereksiz soyutlamadır; doğrudan constructor yeterlidir.

  1. Clean code nedir? Yaygın code smell'ler nelerdir?OrtaOOP & Tasarım DesenleriYazılım Müh.
  2. Dependency Injection nedir? IoC container ne işe yarar?ZorOOP & Tasarım DesenleriYazılım Müh.
  3. Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  4. Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?OrtaOOP & Tasarım DesenleriYazılım Müh.
  5. Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?ZorOOP & Tasarım DesenleriYazılım Müh.
  6. Interface ile abstract class arasındaki fark nedir?KolayOOP & Tasarım DesenleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle