Menu
Coddy logo textTech

Итоги — Logger Factory

Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 66 из 70.

challenge icon

Задание

Легко

Давайте создадим систему логирования, используя паттерн «Фабрика»! Вы создадите различные типы логгеров, которые имеют общий интерфейс, а затем используете фабричную функцию для создания нужного логгера на основе простого строкового аргумента.

Вы организуете свой код в четырех файлах:

  • ConsoleLogger.lua: Создайте класс ConsoleLogger с конструктором :new() и методом :log(message). При вызове :log() он должен выводить сообщение с префиксом [CONSOLE], например [CONSOLE] Your message here.
  • FileLogger.lua: Создайте класс FileLogger с такой же структурой — конструктором :new() и методом :log(message). Этот логгер должен выводить сообщения с префиксом [FILE].
  • LoggerFactory.lua: Здесь реализуется паттерн «Фабрика»! Создайте функцию createLogger(loggerType), которая принимает строковый аргумент. Если тип равен "console", верните новый ConsoleLogger. Если тип равен "file", верните новый FileLogger. Фабрика берет на себя все детали того, какой класс нужно инстанцировать.
  • main.lua: Подключите модуль LoggerFactory. Прочитайте два входных значения: тип логгера и сообщение для логирования. Используйте свою фабрику для создания соответствующего логгера, а затем вызовите его метод :log() с этим сообщением.

Элегантность этого дизайна заключается в том, что ваш основной код взаимодействует только с фабрикой — ему не нужно знать напрямую о ConsoleLogger или FileLogger. Оба логгера реализуют один и тот же интерфейс :log(), поэтому их можно использовать взаимозаменяемо.

Вы получите два входных значения:

  1. Тип логгера (либо "console", либо "file")
  2. Сообщение для логирования

Например, если входные данные — console и Application started, вывод должен быть следующим:

[CONSOLE] Application started

Если входные данные — file и Saving user data..., вывод должен быть следующим:

[FILE] Saving user data...

Попробуйте сами

-- main.lua
-- Основная точка входа для системы логирования

local LoggerFactory = require('LoggerFactory')

-- Чтение входных данных
local loggerType = io.read()
local message = io.read()

-- TODO: Используйте LoggerFactory для создания соответствующего логгера
-- Затем вызовите метод :log() с сообщением

Все уроки раздела Object Oriented Programming