Factory
- Python kursu
- İleri seviye
- Ders 62/83
- 5 dk
Factory desenini öğrenirsin.
Factory
Factory, bir parametreye göre farklı sınıfların örneklerini oluşturan bir desendir. İstemci, hangi sınıfın kullanılacağını bilmeden bir işlev çağırır.
class Dog:
def speak(self):
return "hav"
class Cat:
def speak(self):
return "miyav"
def animal_factory(kind):
if kind == "dog":
return Dog()
if kind == "cat":
return Cat()
raise ValueError("bilinmeyen")Factory, istemci ile somut sınıf arasına bir katman koyar; yeni bir tür eklemek yalnızca bir satır değişiklik gerektirir.
yeni tür ekleme
Factory'ye yeni bir tür eklemek kolaydır: yeni bir sınıf tanımlar ve factory işlevine bir dal eklersin. İstemci kodu değişmez.
class Bird:
def speak(self):
return "cik"
def animal_factory(kind):
# ... mevcut dallar
if kind == "bird":
return Bird()Bu, açık-kapalı ilkesini destekler: sınıflar genişletmeye açık, değiştirmeye kapalıdır.
Uygulama Animal factory yaz
class Dog: ve class Cat: tanımla; her birine def speak(self): metodu ekle (Dog "hav", Cat "miyav" döndürsün). def animal_factory(kind): işlevini yaz: if kind == "dog": return Dog(), if kind == "cat": return Cat(), yoksa raise ValueError("bilinmeyen"). a = animal_factory("dog") ile örnek al. print(a.speak()) ile konuşmayı yazdır.
Başlangıç kodu
# Dog ve Cat sınıflarını tanımla (speak metodu ile)
# animal_factory işlevini yaz: kind'a göre Dog veya Cat döndür
# bilinmeyen türde ValueError fırlat
# 'dog' ile bir örnek al ve speak çıktısını yazdırÖrnek çözüm
class Dog:
def speak(self):
return "hav"
class Cat:
def speak(self):
return "miyav"
def animal_factory(kind):
if kind == "dog":
return Dog()
if kind == "cat":
return Cat()
raise ValueError("bilinmeyen")
a = animal_factory("dog")
print(a.speak())Beklenen çıktı
hav
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 factory çağrısını tamamla
def animal_factory(kind):
if kind == "dog":
return ____()
if kind == "cat":
return Cat()
def animal_factory(kind):
if kind == "dog":
return Dog()
if kind == "cat":
return Cat()
Açıklama: Dog() ile köpek örneği döndürülür.
2 Factory deseninin avantajı nedir?
- Daha hızlı çalışır
- İstemci somut sınıfı bilmez Doğru cevap
- Daha az bellek kullanır
- Kod daha kısa olur
Açıklama: Factory, istemciyi somut sınıftan ayırır; bu, değişikliği kolaylaştırır.
3 Factory kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
animal_factory |
Örnek üretir |
kind parametresi |
Türü belirler |
Dog() |
Somut örnektir |
ValueError |
Bilinmeyen türde fırlatılır |