Итоги — Logger Factory
Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 66 из 70.
Задание
ЛегкоДавайте создадим систему логирования, используя паттерн «Фабрика»! Вы создадите различные типы логгеров, которые имеют общий интерфейс, а затем используете фабричную функцию для создания нужного логгера на основе простого строкового аргумента.
Вы организуете свой код в четырех файлах:
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(), поэтому их можно использовать взаимозаменяемо.
Вы получите два входных значения:
- Тип логгера (либо
"console", либо"file") - Сообщение для логирования
Например, если входные данные — 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
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур