Menu
Coddy logo textTech

Riepilogo - Factory per logger

Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 66 di 70.

challenge icon

Sfida

Facile

Costruiamo un sistema di logging usando il pattern Factory! Creerai diversi tipi di logger che condividono un'interfaccia comune, poi userai una funzione factory per produrre il logger corretto in base a un semplice argomento stringa.

Organizzerai il codice in quattro file:

  • ConsoleLogger.lua: crea una classe ConsoleLogger con un costruttore :new() e un metodo :log(message). Quando viene chiamato :log(), dovrà stampare il messaggio con il prefisso [CONSOLE], come in [CONSOLE] Your message here.
  • FileLogger.lua: crea una classe FileLogger con la stessa struttura: un costruttore :new() e un metodo :log(message). Questo logger dovrà invece stampare i messaggi con il prefisso [FILE].
  • LoggerFactory.lua: è qui che il pattern Factory prende forma! Crea una funzione createLogger(loggerType) che accetta un argomento stringa. Se il tipo è "console", restituisci un nuovo ConsoleLogger. Se il tipo è "file", restituisci un nuovo FileLogger. La factory gestisce tutti i dettagli relativi alla classe da istanziare.
  • main.lua: importa il modulo LoggerFactory. Leggi due input: il tipo di logger e un messaggio da registrare. Usa la factory per creare il logger appropriato, poi chiama il suo metodo :log() con il messaggio.

L'eleganza di questo design sta nel fatto che il codice principale interagisce solo con la factory. Non deve conoscere direttamente ConsoleLogger o FileLogger. Entrambi i logger implementano la stessa interfaccia :log(), quindi possono essere usati in modo intercambiabile.

Riceverai due input:

  1. Tipo di logger (può essere "console" oppure "file")
  2. Il messaggio da registrare

Per esempio, se gli input sono console e Application started, l'output dovrebbe essere:

[CONSOLE] Application started

Se gli input sono file e Saving user data..., l'output dovrebbe essere:

[FILE] Saving user data...

Provalo tu

-- main.lua
-- Punto di ingresso principale del sistema di logging

local LoggerFactory = require('LoggerFactory')

-- Leggi gli input
local loggerType = io.read()
local message = io.read()

-- TODO: Usa LoggerFactory per creare il logger appropriato
-- Poi chiama il metodo :log() con il messaggio

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Lua online