Menu
Coddy logo textTech

Powtórka — fabryka loggera

Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 66 z 70.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system rejestrowania logów z użyciem wzorca Factory! Utworzysz różne typy rejestratorów, które mają wspólny interfejs, a następnie użyjesz funkcji fabrykującej, aby utworzyć odpowiedni rejestrator na podstawie prostego argumentu tekstowego.

Rozmieścisz kod w czterech plikach:

  • ConsoleLogger.lua: Utwórz klasę ConsoleLogger z konstruktorem :new() i metodą :log(message). Po wywołaniu :log() metoda powinna wypisać komunikat z prefiksem [CONSOLE], na przykład [CONSOLE] Your message here.
  • FileLogger.lua: Utwórz klasę FileLogger o tej samej strukturze: z konstruktorem :new() i metodą :log(message). Ten rejestrator powinien zamiast tego wypisywać komunikaty z prefiksem [FILE].
  • LoggerFactory.lua: To tutaj wzorzec Factory łączy wszystko w całość! Utwórz funkcję createLogger(loggerType), która przyjmuje argument tekstowy. Jeśli typ to "console", zwróć nowy obiekt ConsoleLogger. Jeśli typ to "file", zwróć nowy obiekt FileLogger. Fabryka zajmuje się wszystkimi szczegółami dotyczącymi tego, którą klasę utworzyć.
  • main.lua: Zaimportuj moduł LoggerFactory. Wczytaj dwa dane wejściowe: typ rejestratora i komunikat do zapisania w logu. Użyj fabryki, aby utworzyć odpowiedni rejestrator, a następnie wywołaj jego metodę :log(), przekazując jej komunikat.

Zaletą tego projektu jest to, że główny kod korzysta wyłącznie z fabryki. Nie musi bezpośrednio znać klas ConsoleLogger ani FileLogger. Oba rejestratory implementują ten sam interfejs :log(), więc można ich używać zamiennie.

Otrzymasz dwa dane wejściowe:

  1. Typ rejestratora (albo "console", albo "file")
  2. Komunikat do zapisania w logu

Na przykład, jeśli danymi wejściowymi są console i Application started, wynikiem powinno być:

[CONSOLE] Application started

Jeśli danymi wejściowymi są file i Saving user data..., wynikiem powinno być:

[FILE] Saving user data...

Spróbuj swoich sił

-- main.lua
-- Główny punkt wejścia do systemu rejestrowania

local LoggerFactory = require('LoggerFactory')

-- Odczytaj dane wejściowe
local loggerType = io.read()
local message = io.read()

-- TODO: Użyj LoggerFactory, aby utworzyć odpowiedni logger
-- Następnie wywołaj metodę :log() z komunikatem

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Lua online