Padrões de Projeto: Adapter e Observer

Classificado em Computação

Escrito em em português com um tamanho de 3,32 KB

Padrão Adapter

O Padrão Adapter permite que classes incompatíveis trabalhem em conjunto, convertendo a interface de uma classe em outra interface esperada pelo cliente.

Por que usar?

É comum o uso de frameworks ou bibliotecas de terceiros em projetos. O Adapter é essencial para integrar essas bibliotecas sem a necessidade de realizar manutenções no código existente.

Componentes do Adapter

  • Target (Alvo): Define a interface do domínio específico que o cliente utiliza.
  • Adapter (Adaptador): Adapta a interface Adaptee para a interface da classe Target.
  • Adaptee (Adaptada): Define uma interface existente que necessita ser adaptada.
  • Client (Cliente): Colabora com os objetos em conformidade com a interface Target.

Tipos de Adapter

Existem dois tipos principais: Adapter de Classe e Adapter de Objeto.

Consequências: Adapter de Classe

  • Adapta a classe Adaptee à Target através de uma classe Adapter concreta.
  • Não funciona quando precisamos adaptar uma classe e todas as suas subclasses.
  • Permite que o Adapter substitua comportamentos da Adaptee, pois é uma subclasse dela.
  • Introduz apenas um objeto, sem necessidade de endereçamento indireto por ponteiros.

Consequências: Adapter de Objeto

  • Permite que um único Adapter trabalhe com muitos Adaptees (incluindo suas subclasses).
  • Torna mais difícil redefinir o comportamento de uma classe Adaptee, exigindo a criação de subclasses específicas.

Padrão Observer

O Padrão Observer define uma dependência um-para-muitos entre objetos, de modo que, quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente.

Por que usar?

Um objeto que possua agregações deve permitir que seus elementos sejam acessados sem que a sua estrutura interna seja exposta.

Finalidade

O padrão permite que objetos interessados sejam avisados sobre mudanças de estado ou eventos em outro objeto, sem que o emissor precise fazer suposições sobre quem são os observadores.

Consequências

  • Flexibilidade: Observável e observadores podem ser quaisquer objetos.
  • Acoplamento fraco: Os objetos não precisam conhecer a classe concreta uns dos outros.
  • Broadcast: A notificação é enviada para todos, independentemente da quantidade.
  • Desafios: Pode gerar dificuldade na leitura, no debug do código e no gerenciamento de memória.

Problemas com a implementação em Java

Historicamente, a implementação em Java exigia herança de uma classe específica, o que é problemático devido à ausência de herança múltipla na linguagem. Atualmente, recomenda-se o uso de interfaces (herança de tipo) em vez de herança de implementação. A interface Observer, com seu método update, é considerada uma abordagem legada e menos utilizada em projetos modernos.

Entradas relacionadas: