Padrão de Projeto Decorator

Alex Alves
3 min readSep 18, 2023

É um padrão estrutural, o qual permite que um objeto seja modificado, dinamicamente, com novos comportamentos sem alterar o comportamento do objeto original

🛠️ Como Funciona?

O objeto “decorado” envolve a classe original, contendo os novos comportamentos, conforme mostra a imagem abaixo:

🤓 Hands-On

Vamos montar um projeto o qual utilizamos tal padrão para encapsular a funcionalidade de LOG em repositórios que fazem operações em alguma base de dados. Para que isso funcione, precisamos nos atentar nas técnicas de Clean Code (Código Limpo). Assim, quando quisermos “loggar” alguma operação que for feita no banco de dados, iremos utilizar/chamar a classe decorada, informando a classe original como componente, ao invéz de utilizar classe original diretamente.

Participantes:

  • ConcreteComponent (UserRepository) — classe que contém os comportamentos originais
  • Component (IUserRepository) — interface/contrato que sua classe original implementa
  • ConcreteDecorator (LoggerRepository) — classe que extende/utiliza o Component (IUserRepository) e incluir novos comportamentos
  • Decorator (ILoggerRepository) — interface/contrato que sua ConcreteDecorator implementa

--

--

Alex Alves

Bachelor in Computer Science, MBA in Software Architecture and .NET Developer.