Menu
Coddy logo textTech

Итоги — Logger Factory

Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 66 из 70.

challenge icon

Задание

Легко

Давайте создадим систему logging с использованием шаблона Factory! Вы создадите разные типы loggers, которые используют общий интерфейс, а затем примените factory function, чтобы получать подходящий logger на основе простого строкового аргумента.

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

  • ConsoleLogger.lua: Создайте class ConsoleLogger с конструктором :new() и методом :log(message). Когда вызывается :log(), он должен выводить message с префиксом [CONSOLE], например [CONSOLE] Your message here.
  • FileLogger.lua: Создайте class FileLogger с такой же структурой: конструктором :new() и методом :log(message). Этот logger должен выводить messages с префиксом [FILE].
  • LoggerFactory.lua: Именно здесь шаблон Factory объединяет всё воедино! Создайте function createLogger(loggerType), которая принимает строковый аргумент. Если тип — "console", верните новый ConsoleLogger. Если тип — "file", верните новый FileLogger. Factory обрабатывает все детали того, какой class создать.
  • main.lua: Подключите свой module LoggerFactory. Считайте два inputs: тип logger и message для logging. Используйте свой factory, чтобы создать appropriate logger, затем вызовите его :log() method, передав message.

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

Вы получите два inputs:

  1. Тип Logger (либо "console", либо "file")
  2. Message для logging

Например, если inputs — console и Application started, output должен быть таким:

[CONSOLE] Application started

Если inputs — file и Saving user data..., output должен быть таким:

[FILE] Saving user data...

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

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

local LoggerFactory = require('LoggerFactory')

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

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

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Lua