Menu
Coddy logo textTech

Fabrika Fonksiyonları

Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 62 / 70.

Bu kurs boyunca, nesneleri doğrudan yapıcıları (constructors) çağırarak oluşturdunuz—Circle:new(), Rectangle:new() ve benzeri. Peki ya çağıran kodun hangi belirli sınıfın kullanılacağını bilmesine gerek kalmadan, belirli bir koşula bağlı olarak farklı türde nesneler oluşturmak isterseniz?

İşte burada Factory deseni devreye girer. Bir fabrika, basitçe nesneler oluşturan ve döndüren bir fonksiyondur. Temel avantajı, çağıranın nesne oluşturma detaylarını bilmesine gerek olmamasıdır; sadece fabrikadan neye ihtiyacı olduğunu ister.

local function createShape(shapeType)
    if shapeType == "circle" then
        return Circle:new(10)
    elseif shapeType == "square" then
        return Square:new(5)
    end
end

-- Çağıranın Circle veya Square sınıfları hakkında bilgi sahibi olmasına gerek yoktur
local myShape = createShape("circle")
print(myShape:area())

Fabrika fonksiyonu bir string argümanı alır ve hangi sınıfın örneğinin oluşturulacağına karar verir. Bu, nesne oluşturma mantığını tek bir yerde merkezileştirir. Daha sonra yeni bir şekil türü eklerseniz, şekil oluşturan her kod parçasını değil, yalnızca fabrikayı değiştirirsiniz.

Fabrikalar; nesne oluşturma karmaşık kurulumlar içerdiğinde, uygulama detaylarını gizlemek istediğinizde veya nesnenin tam türü kullanıcı girişi ya da yapılandırma dosyaları gibi çalışma zamanı koşullarına bağlı olduğunda özellikle yararlıdır.

challenge icon

Görev

Kolay

Hadi bir Evcil Hayvan Fabrikası (Pet Factory) kuralım! Evcil hayvanları her sınıfın yapılandırıcısını doğrudan çağırarak oluşturmak yerine, basit bir dize argümanına dayanarak doğru evcil hayvan türünü üreten bir fabrika fonksiyonu oluşturacaksınız.

Kodunuzu dört dosya halinde düzenleyeceksiniz:

  • Dog.lua: Evcil hayvanın adını saklayan bir :new(name) yapılandırıcısına sahip bir Dog sınıfı oluşturun. "{name} says: Woof!" dizesini (burada {name} köpeğin adıdır) döndüren bir :speak() metodu ekleyin.
  • Cat.lua: Aynı yapıda bir Cat sınıfı oluşturun—bir :new(name) yapılandırıcısı ve "{name} says: Meow!" döndüren bir :speak() metodu.
  • PetFactory.lua: Fabrika (Factory) deseninin parladığı yer burasıdır! İki argüman alan bir createPet(petType, name) fonksiyonu oluşturun: evcil hayvan türünü belirten bir dize ("dog" veya "cat") ve evcil hayvanın adı. Fonksiyon uygun evcil hayvan nesnesini döndürmelidir. Tür "dog" ise yeni bir Dog; "cat" ise yeni bir Cat döndürün.
  • main.lua: PetFactory modülünüzü dahil edin (require). İki girdi okuyun: evcil hayvan türü ve evcil hayvanın adı. Evcil hayvanı oluşturmak için fabrika fonksiyonunuzu kullanın, ardından :speak() metodunu çağırın ve sonucu yazdırın.

Fabrika deseninin güzelliği, ana kodunuzun Dog veya Cat sınıflarını doğrudan dahil etmesine gerek kalmamasıdır—sadece fabrikayı bilir. Fabrika, hangi sınıfın örnekleneceğine dair tüm detayları halleder.

İki girdi alacaksınız:

  1. Evcil hayvan türü ("dog" veya "cat")
  2. Evcil hayvan adı (bir dize)

Örneğin, girdiler dog ve Buddy ise, çıktı şöyle olmalıdır:

Buddy says: Woof!

Girdiler cat ve Whiskers ise, çıktı şöyle olmalıdır:

Whiskers says: Meow!

Kendin dene

-- main.lua
-- Evcil hayvan oluşturmak için PetFactory'yi kullanın

local PetFactory = require('PetFactory')

-- Girdileri oku
local petType = io.read()
local petName = io.read()

-- YAPILACAK: Evcil hayvanı oluşturmak için PetFactory.createPet kullanın
-- YAPILACAK: Evcil hayvanın :speak() metodunu çağırın ve sonucu yazdırın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler