Menu
Coddy logo textTech

Wiederholung – Logger-Factory

Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 66 von 70.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Logging-System mit dem Factory-Pattern bauen! Sie werden verschiedene Arten von Loggern erstellen, die eine gemeinsame Schnittstelle teilen, und dann eine Factory-Funktion verwenden, um den richtigen Logger basierend auf einem einfachen String-Argument zu erzeugen.

Sie werden Ihren Code über vier Dateien organisieren:

  • ConsoleLogger.lua: Erstellen Sie eine ConsoleLogger-Klasse mit einem :new()-Konstruktor und einer :log(message)-Methode. Wenn :log() aufgerufen wird, sollte sie die Nachricht mit einem [CONSOLE]-Präfix ausgeben, wie zum Beispiel [CONSOLE] Your message here.
  • FileLogger.lua: Erstellen Sie eine FileLogger-Klasse mit derselben Struktur – einem :new()-Konstruktor und einer :log(message)-Methode. Dieser Logger sollte Nachrichten stattdessen mit einem [FILE]-Präfix ausgeben.
  • LoggerFactory.lua: Hier kommt das Factory-Pattern zusammen! Erstellen Sie eine createLogger(loggerType)-Funktion, die ein String-Argument akzeptiert. Wenn der Typ "console" ist, geben Sie einen neuen ConsoleLogger zurück. Wenn der Typ "file" ist, geben Sie einen neuen FileLogger zurück. Die Factory kümmert sich um alle Details, welche Klasse instanziiert werden soll.
  • main.lua: Binden Sie Ihr LoggerFactory-Modul ein. Lesen Sie zwei Eingaben ein: den Logger-Typ und eine zu loggende Nachricht. Verwenden Sie Ihre Factory, um den entsprechenden Logger zu erstellen, und rufen Sie dann dessen :log()-Methode mit der Nachricht auf.

Die Eleganz dieses Designs liegt darin, dass Ihr Hauptcode nur mit der Factory interagiert – er muss nichts direkt über ConsoleLogger oder FileLogger wissen. Beide Logger implementieren dieselbe :log()-Schnittstelle, sodass sie austauschbar verwendet werden können.

Sie erhalten zwei Eingaben:

  1. Logger-Typ (entweder "console" oder "file")
  2. Die zu loggende Nachricht

Wenn die Eingaben beispielsweise console und Application started sind, sollte die Ausgabe wie folgt aussehen:

[CONSOLE] Application started

Wenn die Eingaben file und Saving user data... sind, sollte die Ausgabe wie folgt aussehen:

[FILE] Saving user data...

Probier es selbst

-- main.lua
-- Haupt-Einstiegspunkt für das Logging-System

local LoggerFactory = require('LoggerFactory')

-- Eingaben lesen
local loggerType = io.read()
local message = io.read()

-- TODO: Verwende die LoggerFactory, um den entsprechenden Logger zu erstellen
-- Rufe dann die :log()-Methode mit der Nachricht auf

Alle Lektionen in Object Oriented Programming