Menu
Coddy logo textTech

Resumen - Logger Factory

Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 66 de 70.

challenge icon

Desafío

Fácil

¡Vamos a construir un sistema de registro (logging) utilizando el patrón Factory! Crearás diferentes tipos de registradores que comparten una interfaz común, y luego usarás una función de fábrica para producir el registrador correcto basado en un argumento de cadena simple.

Organizarás tu código en cuatro archivos:

  • ConsoleLogger.lua: Crea una clase ConsoleLogger con un constructor :new() y un método :log(message). Cuando se llame a :log(), debe imprimir el mensaje con un prefijo [CONSOLE], como [CONSOLE] Your message here.
  • FileLogger.lua: Crea una clase FileLogger con la misma estructura: un constructor :new() y un método :log(message). Este registrador debe imprimir mensajes con un prefijo [FILE] en su lugar.
  • LoggerFactory.lua: ¡Aquí es donde el patrón Factory toma forma! Crea una función createLogger(loggerType) que acepte un argumento de cadena. Si el tipo es "console", devuelve un nuevo ConsoleLogger. Si el tipo es "file", devuelve un nuevo FileLogger. La fábrica se encarga de todos los detalles sobre qué clase instanciar.
  • main.lua: Requiere tu módulo LoggerFactory. Lee dos entradas: el tipo de registrador y un mensaje para registrar. Usa tu fábrica para crear el registrador apropiado y luego llama a su método :log() con el mensaje.

La elegancia de este diseño es que tu código principal solo interactúa con la fábrica; no necesita conocer directamente a ConsoleLogger o FileLogger. Ambos registradores implementan la misma interfaz :log(), por lo que pueden usarse indistintamente.

Recibirás dos entradas:

  1. Tipo de registrador (ya sea "console" o "file")
  2. El mensaje a registrar

Por ejemplo, si las entradas son console y Application started, la salida debería ser:

[CONSOLE] Application started

Si las entradas son file y Saving user data..., la salida debería ser:

[FILE] Saving user data...

Pruébalo tú mismo

-- main.lua
-- Punto de entrada principal para el sistema de registro

local LoggerFactory = require('LoggerFactory')

-- Leer entradas
local loggerType = io.read()
local message = io.read()

-- TODO: Usar LoggerFactory para crear el registrador apropiado
-- Luego llamar al método :log() con el mensaje

Todas las lecciones de Object Oriented Programming