Resumen - Logger Factory
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 66 de 70.
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óncreateLogger(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:
- Tipo de registrador (ya sea
"console"o"file") - El mensaje a registrar
Por ejemplo, si las entradas son console y Application started, la salida debería ser:
[CONSOLE] Application startedSi 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
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formas