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