Riepilogo - Factory per logger
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 66 di 70.
Sfida
FacileCostruiamo 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 funzionecreateLogger(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:
- Tipo di logger (può essere
"console"oppure"file") - Il messaggio da registrare
Per esempio, se gli input sono console e Application started, l'output dovrebbe essere:
[CONSOLE] Application startedSe 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
1Il concetto di «self»
Tabelle con funzioni«self» esplicitoLa sintassi dei due puntiPunto o due puntiRiepilogo - Spostare il punto4Progetto: Banca digitale
Configurazione del progettoMetodo di deposito2Schema del prototipo di classe
Il concetto di prototipoCollegare con __indexIl costruttore :new()Inizializzare gli attributiIstanze indipendentiRiepilogo - Fabbrica di auto5Sovraccarico degli operatori nella OOP
Sommare oggettiSottrarre oggettiConcatenare oggettiConfrontare oggetti (<, >)Ripasso - Calcoli con il portafoglio8Incapsulamento
Convenzioni di denominazioneClosure per la privacyAccesso tramite closureTabelle di sola letturaLogica di convalidaRiepilogo - Cassaforte sicura11Modelli di progettazione (base)
Funzioni factoryTabella singletonPattern IteratorObserver (listener)Riepilogo - Factory per logger3Stato e comportamento degli oggetti
Variabili di istanzaMetodi getterMetodi setterProprietà calcolateFormattazione delle stringheControlli di uguaglianzaRiepilogo - Voto dello studente6Fondamenti dell'ereditarietà
Configurare l'ereditarietàEreditare i metodiEstendere il costruttoreAggiungere metodi alla classe figliaCondiviso vs specificoRiepilogo - Gerarchia delle formeEsercitati da solo: Compilatore Lua online