Menu
CoddyTech

Fungsi Factory

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 62 dari 70.

Sepanjang kursus ini, kamu telah membuat object dengan memanggil constructor secara langsung: Circle:new(), Rectangle:new(), dan seterusnya. Namun, bagaimana jika kamu ingin membuat berbagai jenis object berdasarkan suatu kondisi, tanpa kode pemanggil perlu mengetahui class tertentu yang harus digunakan?

Di sinilah pola Factory berperan. Factory hanyalah fungsi yang membuat dan mengembalikan object. Manfaat utamanya adalah pemanggil tidak perlu mengetahui detail pembuatan object. Pemanggil cukup meminta apa yang dibutuhkan kepada factory.

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

-- Pemanggil tidak perlu tahu tentang class Circle atau Square
local myShape = createShape("circle")
print(myShape:area())

Fungsi factory menerima argumen string dan menentukan class mana yang akan dibuat instansinya. Ini memusatkan logika pembuatan object di satu tempat. Jika nanti kamu menambahkan tipe bentuk baru, kamu hanya perlu mengubah factory, bukan setiap bagian kodemu yang membuat bentuk.

Factory sangat berguna ketika pembuatan object melibatkan penyiapan yang rumit, saat kamu ingin menyembunyikan detail implementasi, atau ketika tipe object yang tepat bergantung pada kondisi saat program berjalan, seperti input pengguna atau file konfigurasi.

challenge icon

Tantangan

Mudah

Mari buat Pet Factory! Alih-alih membuat hewan peliharaan secara langsung dengan memanggil constructor setiap class, kamu akan membuat fungsi factory yang menghasilkan jenis hewan peliharaan yang tepat berdasarkan argumen string sederhana.

Kamu akan mengatur kodemu dalam empat file:

  • Dog.lua: Buat class Dog dengan constructor :new(name) yang menyimpan nama hewan peliharaan. Tambahkan method :speak() yang mengembalikan string "{name} says: Woof!" (dengan {name} sebagai nama anjing).
  • Cat.lua: Buat class Cat dengan struktur yang sama: constructor :new(name) dan method :speak() yang mengembalikan "{name} says: Meow!".
  • PetFactory.lua: Di sinilah pola Factory berperan! Buat fungsi createPet(petType, name) yang menerima dua argumen: string yang menunjukkan jenis hewan peliharaan ("dog" atau "cat") dan nama hewan peliharaan. Fungsi ini harus mengembalikan object hewan peliharaan yang sesuai. Jika jenisnya "dog", kembalikan Dog baru; jika "cat", kembalikan Cat baru.
  • main.lua: Muat module PetFactory-mu. Baca dua input: jenis hewan peliharaan dan namanya. Gunakan fungsi factory-mu untuk membuat hewan peliharaan, lalu panggil method :speak() dan cetak hasilnya.

Keunggulan pola Factory adalah kode utamamu tidak perlu memuat Dog atau Cat secara langsung. Kode tersebut hanya perlu mengetahui factory. Factory menangani semua detail tentang class mana yang akan dibuat sebagai instance.

Kamu akan menerima dua input:

  1. Jenis hewan peliharaan (antara "dog" atau "cat")
  2. Nama hewan peliharaan (sebuah string)

Misalnya, jika inputnya adalah dog dan Buddy, outputnya akan seperti berikut:

Buddy says: Woof!

Jika inputnya adalah cat dan Whiskers, outputnya akan seperti berikut:

Whiskers says: Meow!

Coba sendiri

-- main.lua
-- Gunakan PetFactory untuk membuat hewan peliharaan

local PetFactory = require('PetFactory')

-- Baca input
local petType = io.read()
local petName = io.read()

-- TODO: Gunakan PetFactory.createPet untuk membuat hewan peliharaan
-- TODO: Panggil method :speak() milik hewan peliharaan dan cetak hasilnya
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler Lua online