Recapitulação - Logger Factory
Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 66 de 70.
Desafio
FácilVamos 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çãocreateLogger(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:
- Tipo de registrador (ou
"console"ou"file") - A mensagem a ser registrada
Por exemplo, se as entradas forem console e Application started, a saída deverá ser:
[CONSOLE] Application startedSe 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
1O Conceito 'Self'
Tabelas com Funções'self' ExplícitoA Sintaxe de Dois-pontosPonto vs Dois-pontosRecapitulação - Movendo o Ponto4Projeto: Banco Digital
Configuração do ProjetoMétodo de Depósito7Polimorfismo e Sobrescrita
Sobrescrita de MétodosChamando Métodos da Classe PaiDuck TypingInterface ComumVerificando o TipoRecapitulação - Papéis de Funcionários10Projeto: Gerenciador de Formas
Configuração do ProjetoClasse RetânguloClasse CírculoMétodo PerímetroColeção de FormasÁrea TotalFiltrar Formas2Padrão de Protótipo de Classe
O Conceito de ProtótipoVinculando com __indexO Construtor :new()Inicializando AtributosInstâncias IndependentesRecapitulação - Fábrica de Carros5Sobrecarga de Operadores em POO
Somando ObjetosSubtraindo ObjetosConcatenando ObjetosComparando Objetos (<, >)Recapitulação - Matemática de Carteira8Encapsulamento
Convenções de NomenclaturaClosures para PrivacidadeAcesso via ClosuresTabelas Somente LeituraLógica de ValidaçãoRecapitulação - Cofre Seguro11Padrões de Projeto (Lite)
Funções FactoryTabela SingletonPadrão IteratorObserver (Listener)Recapitulação - Logger Factory3Estado e Comportamento do Objeto
Variáveis de InstânciaMétodos GetterMétodos SetterPropriedades CalculadasFormatação de StringsVerificações de IgualdadeRecapitulação - Nota do Aluno6Fundamentos de Herança
Configurando a HerançaHerdando MétodosEstendendo o ConstrutorAdicionando Métodos FilhosCompartilhado vs ÚnicoRecapitulação - Hierarquia de FormasPratique por conta própria: Compilador de Lua online