factory
- Dart kursu
- Orta seviye
- Ders 5/116
- 5 dk
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
// 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
// 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
class User {
String name;
User(this.name);
____ User.guest() { return User('Ziyaretçi'); }
}
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 |