Wiederholung – Logger-Factory
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 66 von 70.
Aufgabe
EinfachLassen 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 einecreateLogger(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:
- Logger-Typ (entweder
"console"oder"file") - Die zu loggende Nachricht
Wenn die Eingaben beispielsweise console und Application started sind, sollte die Ausgabe wie folgt aussehen:
[CONSOLE] Application startedWenn 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
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-Klasse2Klassen-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