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.