CodeBlanks Logo Icon CodeBlanks

factory

factory constructor ile esnek oluşturma öğrenirsin.

factory constructor

Bir factory constructor, her zaman yeni bir örnek üretmek zorunda değildir; var olan bir örneği döndürebilir ya da bir alt sınıf örneği verebilir. factory anahtar kelimesi ile başlar.

Örnek: factory User.guest() { return User('Ziyaretçi'); }. Burada factory gövdesi bir return içermek zorundadır; default constructor gibi doğrudan alan atayamaz. Factory'ler önbellek (cache), tek örneklilik (singleton) ve koşullu üretim için uygundur. Normal constructor her zaman yeni örnek yaratır; factory ise esnektir.

Singleton ve önbellek

Factory constructor'ın en yaygın kullanımı singleton (tek örnek) desenidir. Sınıf içinde static bir alan örnek tutar; factory her çağrıda aynı örneği döndürür.

Örnek: class Logger { static final Logger _instance = Logger._(); Logger._(); factory Logger() => _instance; }. Burada Logger._() private named constructor yalnızca sınıf içinden çağrılabilir; _instance static alanda saklanır. Logger() çağrısı her seferinde aynı örneği döndürür. Bu yapı, logger, yapılandırma veya veritabanı bağlantısı gibi tek olması gereken nesneler için uygundur.

Uygulama User.guest factory'sini yaz

User sınıfını tanımla; String name alanını ve User(this.name) default constructor'ını ekle. factory User.guest() { return User('Ziyaretçi'); } factory constructor'ını yaz. main içinde var u = User.guest(); ile örnek oluştur ve print(u.name) çağrısı yap.

Başlangıç kodu

main.dart
// User sınıfını tanımla
// String name alanı ve default yapıcı ekle
// factory User.guest() ekle

void main() {
  // User.guest() örneğini oluştur ve u.name yazdır
}

Örnek çözüm

main.dart
// User sınıfını tanımla
class User {
  String name;
  User(this.name);
  factory User.guest() {
    return User('Ziyaretçi');
  }
}

void main() {
  var u = User.guest();
  print(u.name);
}

Beklenen çıktı

Ziyaretçi

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 factory anahtarını ekle

Soru
class User {
  String name;
  User(this.name);
  ____ User.guest() { return User('Ziyaretçi'); }
}
Cevap
class User {
  String name;
  User(this.name);
  factory User.guest() { return User('Ziyaretçi'); }
}

Açıklama: factory anahtar kelimesi esnek üretim yapan yapıcıyı işaretler.

2 factory constructor ne döndürmek zorundadır?

  • Sınıfın kendisinden bir örnek Doğru cevap
  • Yalnızca alt sınıf örneği
  • Yalnızca null
  • Hiçbir şey

Açıklama: factory, sınıfın kendisinden bir örnek döndürmek zorundadır; yeni veya var olan fark etmez.

3 factory parçalarını eşle

Kavram Anlamı
factory Anahtar kelime
return Gövde zorunluluğu
static Örnek saklayan alan

Orta seviye bölümündeki tüm dersler