Menu
Coddy logo textTech

Recapitulação - Logger Factory

Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 66 de 70.

challenge icon

Desafio

Fácil

Vamos criar um sistema de registro usando o padrão Factory! Você criará diferentes tipos de registradores que compartilham uma interface comum e, em seguida, usará uma função de fábrica para produzir o registrador adequado com base em um simples argumento de string.

Você organizará seu código em quatro arquivos:

  • ConsoleLogger.lua: Crie uma classe ConsoleLogger com um construtor :new() e um método :log(message). Quando :log() for chamado, ele deverá imprimir a mensagem com o prefixo [CONSOLE], como em [CONSOLE] Your message here.
  • FileLogger.lua: Crie uma classe FileLogger com a mesma estrutura: um construtor :new() e um método :log(message). Esse registrador deverá imprimir as mensagens com o prefixo [FILE].
  • LoggerFactory.lua: É aqui que o padrão Factory se concretiza! Crie uma função createLogger(loggerType) que aceite um argumento de string. Se o tipo for "console", retorne um novo ConsoleLogger. Se o tipo for "file", retorne um novo FileLogger. A fábrica cuida de todos os detalhes sobre qual classe instanciar.
  • main.lua: Importe seu módulo LoggerFactory. Leia duas entradas: o tipo de registrador e uma mensagem para registrar. Use sua fábrica para criar o registrador apropriado e, em seguida, chame seu método :log() com a mensagem.

A elegância desse design é que seu código principal interage apenas com a fábrica. Ele não precisa conhecer diretamente ConsoleLogger ou FileLogger. Ambos os registradores implementam a mesma interface :log(), portanto podem ser usados de forma intercambiável.

Você receberá duas entradas:

  1. Tipo de registrador (ou "console" ou "file")
  2. A mensagem a ser registrada

Por exemplo, se as entradas forem console e Application started, a saída deverá ser:

[CONSOLE] Application started

Se as entradas forem file e Saving user data..., a saída deverá ser:

[FILE] Saving user data...

Experimente você mesmo

-- main.lua
-- Ponto de entrada principal do sistema de logging

local LoggerFactory = require('LoggerFactory')

-- Ler entradas
local loggerType = io.read()
local message = io.read()

-- TODO: Use o LoggerFactory para criar o logger apropriado
-- Então chame o método :log() com a mensagem

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Lua online