Powtórka — fabryka loggera
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 66 z 70.
Wyzwanie
ŁatwyZbudujmy 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:
- Typ rejestratora (albo
"console", albo"file") - Komunikat do zapisania w logu
Na przykład, jeśli danymi wejściowymi są console i Application started, wynikiem powinno być:
[CONSOLE] Application startedJeś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
1Koncepcja „self”
Tabele z funkcjamiJawne „self”Składnia z dwukropkiemKropka czy dwukropekPodsumowanie — poruszający się punkt4Projekt: Bank cyfrowy
Konfiguracja projektuMetoda wpłaty7Polimorfizm i nadpisywanie
Nadpisywanie metodWywoływanie metod klasy nadrzędnejTypowanie kaczeWspólny interfejsSprawdzanie typuPodsumowanie — role pracowników10Projekt: Menedżer kształtów
Konfiguracja projektuKlasa prostokątaKlasa kołaMetoda obwoduKolekcja kształtówPole całkowiteFiltrowanie kształtów2Wzorzec prototypu klasy
Koncepcja prototypuŁączenie za pomocą __indexKonstruktor :new()Inicjalizacja atrybutówNiezależne instancjePodsumowanie – fabryka samochodów5Przeciążanie operatorów w OOP
Dodawanie obiektówOdejmowanie obiektówŁączenie obiektówPorównywanie obiektów (<, >)Powtórka — działania na portfelu8Hermetyzacja
Konwencje nazewnictwaDomknięcia dla prywatnościDostęp za pomocą domknięćTabele tylko do odczytuLogika walidacjiPodsumowanie — bezpieczny sejf11Wzorce projektowe (podstawy)
Funkcje fabrykująceTabela SingletonWzorzec iteratoraObserwator (nasłuchujący)Powtórka — fabryka loggera3Stan i zachowanie obiektu
Zmienne instancjiMetody dostępoweMetody ustawiająceWłaściwości obliczaneFormatowanie ciągów znakówSprawdzanie równościPodsumowanie – ocena ucznia6Podstawy dziedziczenia
Konfiguracja dziedziczeniaDziedziczenie metodRozszerzanie konstruktoraDodawanie metod potomnychWspólne i unikalne elementyPowtórka — hierarchia kształtówPoćwicz samodzielnie: Kompilator Lua online