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.
LightThemeFactoryhemButtonhemCheckboxüretir,DarkThemeFactoryde 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.
İlgili OOP & Tasarım Desenleri soruları
- Clean code nedir? Yaygın code smell'ler nelerdir?
- Dependency Injection nedir? IoC container ne işe yarar?
- Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?
- Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?
- Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?
- Interface ile abstract class arasındaki fark nedir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.