Padrão de Design Decorator: Uma Abordagem Flexível e Modular

Ildeberto Vasconcelos
3 min readJan 2, 2024

--

O Decorator Pattern é um dos padrões de design fundamentais na programação orientada a objetos. Ele permite adicionar comportamentos ou responsabilidades a objetos individuais de forma dinâmica, sem modificar a estrutura desses objetos. Basicamente esse padrão oferece uma maneira flexível de estender funcionalidades de forma modular.

A imagem mostra uma pizza simples com uma fatia cortada, e vários ingredientes ao lado que podem ser usados como decoradores. Cada ingrediente tem uma seta que aponta para a pizza, indicando que pode ser adicionado a ela.

O que é o Decorator Pattern?

Em termos miudos , envolve a adição de novos comportamentos a objetos existentes, envolvendo esses objetos em classes decoradoras que implementam interfaces semelhantes. Essas classes adicionam funcionalidades extras ao objeto sem alterar sua estrutura pressuposta.

mais abaixo veremos um exemplo que vai nos ajudar a compreender melhor.

Vantagens do Decorator Pattern

  1. Flexibilidade: Permite adicionar e remover funcionalidades de forma dinâmica.
  2. Modularidade: Classes decoradoras podem ser combinadas de maneira flexível para criar comportamentos variados.
  3. Open-Closed Principle: Um dos Principios do SOLID , Permite a extensão de comportamento sem modificar o código existente.

Desvantagens do Decorator Pattern

  1. Complexidade: O uso excessivo de classes decoradoras pode complicar a compreensão do código.
  2. Possível Overhead: O padrão pode resultar em muitas classes pequenas, o que pode aumentar a complexidade e o consumo de memória.

Quando Usar?

O Decorator Pattern é útil em cenários onde a flexibilidade na adição de funcionalidades a objetos individuais é necessária, mantendo a estrutura existente intocada. Além disso, é benéfico quando se precisa de uma variedade de combinações de comportamentos em tempo de execução.

Exemplo com Flutter/Dart

No contexto de desenvolvimento de aplicações móveis com Flutter, o Decorator Pattern pode ser aplicado para adicionar recursos dinamicamente a widgets. Por exemplo, considere um aplicativo onde diferentes botões precisam ter diferentes estilos de borda e cores. Em vez de criar múltiplas subclasses de botão para cada variação, pode-se usar o Decorator Pattern.

// Interface para o widget de botão
abstract class Botao {
void desenhar();
}
// Implementação básica do widget de botão
class BotaoSimples implements Botao {
@override
void desenhar() {
print('Botão simples');
}

Até aqui foi só a criação de uma interface e uma implementação simples,agora vamos para a aplicação do Decorator Pattern

// Decorator para adicionar borda a um botão
class BordaDecorator implements Botao {
Botao _botaoDecorado;
BordaDecorator(this._botaoDecorado);
@override
void desenhar() {
_botaoDecorado.desenhar();
print('com borda');
}
}
// Decorator para alterar a cor de um botão
class CorDecorator implements Botao {
Botao _botaoDecorado;
String _cor;

CorDecorator(this._botaoDecorado, this._cor);
@override
void desenhar() {
_botaoDecorado.desenhar();
print('com cor $_cor');
}
}

Criamos dois Decorators, Um para alterar a cor e outro para adicionar borda ao botão,passamos agora para ver o resultado e teremos :

void main() {
// Criar um botão simples
Botao botao = BotaoSimples();
  // Adicionando borda ao botão
botao = BordaDecorator(botao);
// Alterando a cor do botão
botao = CorDecorator(botao, 'vermelho');
// Resultado final
botao.desenhar(); // Saída: Botão simples com borda com cor vermelha
}

Conclusão

O Decorator Pattern é uma ferramenta poderosa para adicionar responsabilidades dinamicamente a objetos, promovendo a flexibilidade e a modularidade do código. Ao usá-lo com juízo, é possível criar sistemas mais expansíveis e adaptáveis, mantendo a estrutura original dos objetos intacta.

--

--

Ildeberto Vasconcelos
Ildeberto Vasconcelos

Written by Ildeberto Vasconcelos

📱Flutter & Dart 🚀💻 Turning ideas into powerful applications.💡🔥 #Flutter | .NET

No responses yet