Menu
Coddy logo textTech

Récapitulatif - Logger Factory

Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 66 sur 70.

challenge icon

Défi

Facile

Construisons un système de journalisation en utilisant le pattern Factory ! Vous allez créer différents types de loggers qui partagent une interface commune, puis utiliser une fonction factory pour produire le bon logger basé sur un simple argument de type chaîne de caractères.

Vous organiserez votre code sur quatre fichiers :

  • ConsoleLogger.lua : Créez une classe ConsoleLogger avec un constructeur :new() et une méthode :log(message). Lorsque :log() est appelée, elle doit afficher le message avec un préfixe [CONSOLE], comme [CONSOLE] Your message here.
  • FileLogger.lua : Créez une classe FileLogger avec la même structure — un constructeur :new() et une méthode :log(message). Ce logger doit afficher les messages avec un préfixe [FILE] à la place.
  • LoggerFactory.lua : C'est ici que le pattern Factory prend forme ! Créez une fonction createLogger(loggerType) qui accepte un argument de type chaîne. Si le type est "console", retournez un nouveau ConsoleLogger. Si le type est "file", retournez un nouveau FileLogger. La factory gère tous les détails de la classe à instancier.
  • main.lua : Importez votre module LoggerFactory. Lisez deux entrées : le type de logger et un message à enregistrer. Utilisez votre factory pour créer le logger approprié, puis appelez sa méthode :log() avec le message.

L'élégance de cette conception est que votre code principal n'interagit qu'avec la factory — il n'a pas besoin de connaître directement ConsoleLogger ou FileLogger. Les deux loggers implémentent la même interface :log(), ils peuvent donc être utilisés de manière interchangeable.

Vous recevrez deux entrées :

  1. Le type de logger (soit "console" ou "file")
  2. Le message à enregistrer

Par exemple, si les entrées sont console et Application started, la sortie devrait être :

[CONSOLE] Application started

Si les entrées sont file et Saving user data..., la sortie devrait être :

[FILE] Saving user data...

Essayez vous-même

-- main.lua
-- Point d'entrée principal pour le système de journalisation

local LoggerFactory = require('LoggerFactory')

-- Lire les entrées
local loggerType = io.read()
local message = io.read()

-- TODO : Utiliser LoggerFactory pour créer le logger approprié
-- Ensuite, appeler la méthode :log() avec le message

Toutes les leçons de Object Oriented Programming