Menu
Coddy logo textTech

Wiederholung – Logger-Factory

Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 66 von 70.

challenge icon

Aufgabe

Einfach

Erstellen wir ein Protokollierungssystem mit dem Fabrikmuster! Du erstellst verschiedene Arten von Loggern, die eine gemeinsame Schnittstelle verwenden, und nutzt dann eine Fabrikfunktion, um anhand eines einfachen Zeichenkettenarguments den passenden Logger zu erzeugen.

Du organisierst deinen Code über vier Dateien:

  • ConsoleLogger.lua: Erstelle eine ConsoleLogger-Klasse mit einem :new()-Konstruktor und einer :log(message)-Methode. Wenn :log() aufgerufen wird, soll sie die Nachricht mit dem Präfix [CONSOLE] ausgeben, etwa [CONSOLE] Your message here.
  • FileLogger.lua: Erstelle eine FileLogger-Klasse mit derselben Struktur: einem :new()-Konstruktor und einer :log(message)-Methode. Dieser Logger soll Nachrichten stattdessen mit dem Präfix [FILE] ausgeben.
  • LoggerFactory.lua: Hier kommt das Fabrikmuster zusammen! Erstelle eine createLogger(loggerType)-Funktion, die ein Zeichenkettenargument akzeptiert. Wenn der Typ "console" ist, gib einen neuen ConsoleLogger zurück. Wenn der Typ "file" ist, gib einen neuen FileLogger zurück. Die Fabrik kümmert sich um alle Details darüber, welche Klasse instanziiert werden soll.
  • main.lua: Binde dein LoggerFactory-Modul ein. Lies zwei Eingaben ein: den Logger-Typ und eine zu protokollierende Nachricht. Verwende deine Fabrik, um den passenden Logger zu erstellen, und rufe anschließend dessen :log()-Methode mit der Nachricht auf.

Die Eleganz dieses Designs besteht darin, dass dein Hauptcode nur mit der Fabrik interagiert. Er muss ConsoleLogger oder FileLogger nicht direkt kennen. Beide Logger implementieren dieselbe :log()-Schnittstelle und können daher austauschbar verwendet werden.

Du erhältst zwei Eingaben:

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

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

[CONSOLE] Application started

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

[FILE] Saving user data...

Probier es selbst

-- main.lua
-- Haupteinstiegspunkt 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 message auf

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Lua-Compiler