CodeBlanks Logo Icon CodeBlanks

Factory

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

main.py
# 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

main.py
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

Soru
def animal_factory(kind):
    if kind == "dog":
        return ____()
    if kind == "cat":
        return Cat()
Cevap
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

İleri seviye bölümündeki tüm dersler