Resumen - Logger Factory
Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 66 de 70.
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óncreateLogger(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:
- Tipo de registrador (ya sea
"console"o"file") - El mensaje que se registrará
Por ejemplo, si las entradas son console y Application started, la salida debe ser:
[CONSOLE] Application startedSi 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
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 formasPractica por tu cuenta: Compilador de Lua online