Wiederholung – Logger-Factory
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 66 von 70.
Aufgabe
EinfachErstellen 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 einecreateLogger(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:
- Logger-Typ (entweder
"console"oder"file") - Die zu protokollierende Nachricht
Wenn die Eingaben beispielsweise console und Application started lauten, sollte die Ausgabe wie folgt aussehen:
[CONSOLE] Application startedWenn 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
1Das 'self'-Konzept
Tabellen mit FunktionenExplizites 'self'Die Doppelpunkt-SyntaxPunkt vs. DoppelpunktZusammenfassung – Beweglicher Punkt4Projekt: Digitale Bank
Projekt-SetupEinzahlungsmethode7Polymorphie & Überschreiben
Methoden überschreibenElternmethoden aufrufenDuck TypingGemeinsames InterfaceTyp prüfenRückblick - Mitarbeiterrollen10Projekt: Formen-Manager
Projekt-SetupRechteck-KlasseKreis-KlasseUmfang-MethodeFormen-SammlungGesamtflächeFormen filtern2Klassen-Prototyp-Muster
Das Prototyp-KonzeptVerknüpfung mit __indexDer :new()-KonstruktorAttribute initialisierenUnabhängige InstanzenZusammenfassung – Autofabrik5Operatorüberladung in OOP
Objekte addierenObjekte subtrahierenObjekte verkettenObjekte vergleichen (<, >)Rückblick – Wallet-Mathematik8Kapselung
NamenskonventionenClosures für private DatenZugriff über ClosuresSchreibgeschützte TabellenValidierungslogikZusammenfassung – Sicherer Tresor11Entwurfsmuster (Lite)
Factory-FunktionenSingleton-TabelleIterator-MusterObserver (Listener)Wiederholung – Logger-Factory3Objektzustand und -verhalten
InstanzvariablenGetter-MethodenSetter-MethodenBerechnete EigenschaftenStrings formatierenGleichheitsprüfungenZusammenfassung – Studentennote6Grundlagen der Vererbung
Das Vererbungs-SetupMethoden vererbenDen Konstruktor erweiternChild-Methoden hinzufügenGemeinsam vs. EinzigartigZusammenfassung - Formen-Hierarchie9Komposition & Mixins
Has-A-BeziehungDelegationEinfache MixinsAnwendung mehrerer MixinsMixins vs. VererbungZusammenfassung – Roboter-Montage12Abschluss-Herausforderungen
Wiederholung - InventarsystemWiederholung - BenutzerverwaltungWiederholung - Score-TrackerFinaler OOP-CheckÜbe selbstständig: Online-Lua-Compiler