# Factory Deseni

Adres: https://softwaredictionary.org/tr/terimler/factory-pattern
Kategori: Yazılım Mimarisi
Son güncelleme: 2026-09-30
İngilizcesi: Factory Pattern
Türkçe karşılığı: fabrika deseni
Okunuşu: fektıri petırn

Kısaca: Factory deseni, nesne oluşturmayı özel bir fonksiyona ya da sınıfa taşıyan ve çağıranların somut sınıfı hiç adlandırmadığı oluşturucu bir tasarım desenidir.

## Factory deseni nedir?

Factory deseni, `new SomeClass()` çağrılarını kod tabanına dağıtmak yerine nesne oluşturma işini tek bir yere, yani bir factory'ye koyar. Çağıranlar factory'den bir arayüze uyan bir nesne ister; hangi somut sınıfın oluşturulacağına ve nasıl yapılandırılacağına factory karar verir. Bu, kodun geri kalanını belirli uygulamalardan bağımsız tutar; yenilerini eklemeyi ya da testlerde değiştirmeyi kolaylaştırır.

Ad birkaç ilişkili çeşidi kapsar. Basit factory (simple factory), girdiye göre çoğunlukla `switch` ifadesiyle farklı sınıflar döndüren bir fonksiyon ya da statik metottur. Klasik Gang of Four kitabındaki factory method deseni, alt sınıfların hangi nesnenin oluşturulacağına karar vermek için bir oluşturma metodunu geçersiz kılmasına izin verir; abstract factory deseni ise açık ya da koyu tema için birbirine uyan düğmeler ve menüler gibi ilişkili nesnelerin bütün ailelerini oluşturmak için bir arayüz sağlar.

Araba kiralama masası gibi çalışır: kompakt bir araba istersiniz ve masa, kimin ürettiğini bilmenize gerek kalmadan müsait olan kompakt modeli teslim eder. Factory'ler bir depolama arka ucunu, ödeme sağlayıcısını ya da logger'ı yapılandırmadan seçmek, dosya türüne göre bir ayrıştırıcı (parser) seçmek ve doğru ayarlarla veritabanı bağlantıları veya HTTP istemcileri oluşturmak için yaygındır.

Factory deseni sıklıkla builder deseni ve dependency injection ile karıştırılır. Builder tek bir karmaşık nesneyi bir dizi metot çağrısıyla adım adım oluşturur; factory ise hazır bir nesneyi tek çağrıda döndürür. Dependency injection bir nesnenin bağımlılıklarını dışarıdan kimin sağladığıyla ilgilidir ve DI container'lar iç işleyişinde factory kullanır, ama tek başına bir factory hiçbir şey enjekte etmez. Her desen gibi factory de dolaylılık ekler; bu yüzden yalnızca uygulamalar arasında gerçek bir seçim olduğunda değerlidir.

## Önemli noktalar

- Factory, nesne oluşturmayı tek bir fonksiyon ya da sınıfın arkasında merkezileştirir.
- Çağıranlar, oluşturulan somut sınıfa değil, bir arayüze bağımlıdır.
- Çeşitleri arasında simple factory, factory method ve abstract factory bulunur.
- Builder tek bir nesneyi adım adım oluşturur; factory onu tek çağrıda döndürür.
- Uygulamalar arasında gerçek bir seçim olduğunda factory kullanın.

## Örnek: Bir depolama uygulaması seçen basit bir factory

```typescript
interface Storage {
  save(key: string, data: string): Promise<void>;
}

class LocalDiskStorage implements Storage { async save() { /* write to disk */ } }
class CloudStorage implements Storage { async save() { /* upload to object storage */ } }

// The factory decides which concrete class to create
function createStorage(kind: "local" | "cloud"): Storage {
  return kind === "cloud" ? new CloudStorage() : new LocalDiskStorage();
}

// Callers only know about the Storage interface
const storage = createStorage(process.env.STORAGE === "cloud" ? "cloud" : "local");
await storage.save("report.txt", "Quarterly numbers");
```

## Sık sorulan sorular

**Factory method ile abstract factory arasındaki fark nedir?**

Factory method tek bir tür nesne oluşturur ve somut sınıfa alt sınıfların ya da yapılandırmanın karar vermesine izin verir. Abstract factory ise birlikte kullanılması amaçlanan ilişkili nesneler ailesi üretmek için birkaç oluşturma metodunu gruplar.

**Factory deseni ile builder deseni arasındaki fark nedir?**

Factory hazır bir nesneyi tek çağrıda döndürür ve hangi sınıfı seçtiğini gizler. Builder ise `build()` gibi son bir metodu çağırmadan önce seçenekleri tek tek ayarlayarak tek bir karmaşık nesneyi adım adım oluşturmanıza olanak tanır.

**Factory deseni ne zaman kullanılmalı?**

Oluşturulacak sınıf yapılandırmaya, girdiye ya da ortama bağlı olduğunda veya oluşturma her yerde tekrarlanmasını istemediğiniz bir kurulum içerdiğinde kullanın. Yalnızca tek bir uygulama varsa sade bir constructor daha basittir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
