Menu
Coddy logo textTech

Resumen - Logger Factory

Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 66 de 70.

challenge icon

Desafío

Fácil

¡Construyamos un sistema de registro mediante el patrón Factory! Crearás diferentes tipos de registradores que comparten una interfaz común y, después, usarás una función de fábrica para producir el registrador adecuado basándote en un argumento de cadena sencillo.

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 el prefijo [CONSOLE], como en [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 los mensajes con el prefijo [FILE] en su lugar.
  • LoggerFactory.lua: ¡Aquí es donde se combina el patrón Factory! Crea una función createLogger(loggerType) que acepte un argumento de cadena. Si el tipo es "console", devuelve un ConsoleLogger nuevo. Si el tipo es "file", devuelve un FileLogger nuevo. La fábrica gestiona 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 adecuado y, después, 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 ConsoleLogger ni FileLogger. Ambos registradores implementan la misma interfaz :log(), por lo que pueden utilizarse indistintamente.

Recibirás dos entradas:

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

Por ejemplo, si las entradas son console y Application started, la salida debe ser:

[CONSOLE] Application started

Si las entradas son file y Saving user data..., la salida debe ser:

[FILE] Saving user data...

Pruébalo tú mismo

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

local LoggerFactory = require('LoggerFactory')

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

-- TODO: Usa el LoggerFactory para crear el logger apropiado
-- Luego llama al método :log() con el mensaje

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Lua online