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ı çağırarak oluşturdun: Circle:new(), Rectangle:new() ve benzerleri. Peki ya çağıran kodun hangi belirli sınıfı kullanması gerektiğini bilmesine gerek kalmadan, bir koşula bağlı olarak farklı türlerde nesneler oluşturmak istersen?

İşte Factory pattern burada devreye girer. Factory, basitçe nesneler oluşturan ve döndüren bir işlevdir. Temel avantajı, çağıranın nesne oluşturmanın ayrıntılarını bilmesine gerek olmamasıdır. Sadece ihtiyaç duyduğu şeyi Factory’den 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ını bilmesine gerek yoktur
local myShape = createShape("circle")
print(myShape:area())

Fabrika işlevi bir dize bağımsız değişkeni alır ve hangi sınıfın örneklendirileceğine 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 bir kurulum içerdiğinde, uygulama ayrıntılarını gizlemek istediğinizde veya nesnenin kesin türü kullanıcı girdisi ya da yapılandırma dosyaları gibi çalışma zamanı koşullarına bağlı olduğunda özellikle kullanışlıdır.

challenge icon

Görev

Kolay

Bir Pet Factory oluşturalım! Evcil hayvanları her sınıfın yapıcısını çağırarak doğrudan oluşturmak yerine, basit bir dize bağımsız değişkenine göre doğru türde evcil hayvanı üreten bir fabrika işlevi oluşturacaksın.

Kodunu dört dosyaya ayıracaksın:

  • Dog.lua: Evcil hayvanın adını saklayan :new(name) yapıcısına sahip bir Dog sınıfı oluştur. :speak() dizesini döndüren bir "{name} says: Woof!" yöntemi ekle ({name}, köpeğin adıdır).
  • Cat.lua: Aynı yapıya sahip bir Cat sınıfı oluştur: :new(name) yapıcısı ve :speak() döndüren bir "{name} says: Meow!" yöntemi.
  • PetFactory.lua: Factory deseni burada öne çıkar! İki bağımsız değişken alan bir createPet(petType, name) işlevi oluştur: evcil hayvan türünü belirten bir dize ("dog" veya "cat") ve evcil hayvanın adı. İşlev uygun evcil hayvan nesnesini döndürmelidir. Tür "dog" ise yeni bir Dog; "cat" ise yeni bir Cat döndür.
  • main.lua: PetFactory modülünü require et. İki girdi oku: evcil hayvanın türü ve adı. Evcil hayvanı oluşturmak için fabrika işlevini kullan, ardından :speak() yöntemini çağır ve sonucu yazdır.

Factory deseninin güzelliği, ana kodunun Dog veya Cat'i doğrudan require etmek zorunda olmamasıdır. Ana kod yalnızca fabrikayı bilir. Hangi sınıfın örneklendirileceğine ilişkin tüm ayrıntıları fabrika yönetir.

İki girdi alacaksın:

  1. Evcil hayvan türü ("dog" veya "cat")
  2. Evcil hayvanın 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 hayvanlar oluşturmak için PetFactory'yi kullan

local PetFactory = require('PetFactory')

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

-- TODO: Evcil hayvanı oluşturmak için PetFactory.createPet kullan
-- TODO: Evcil hayvanın :speak() metodunu çağır ve sonucu yazdır
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

Kendi başına pratik yap: Online Lua derleyicisi