1.1 Definição
O padrão Adaptador é um padrão de design estrutural que permite que a interface de uma classe seja convertida em outra interface esperada pelo cliente. O padrão Adaptador torna possível para classes que não podem trabalhar juntas devido a interfaces incompatíveis colaborarem.
1.2 Propósito e Efeito
O principal propósito do padrão Adaptador é resolver o problema de compatibilidade entre duas interfaces incompatíveis. Ao usar uma classe adaptadora, ele permite que classes incompatíveis cooperem para implementar uma funcionalidade específica.
1.3 Princípios básicos do padrão Adaptador
- Ao converter uma interface em outra interface, o padrão adaptador é adequado para lidar com classes existentes.
- O padrão adaptador implementa a conversão de interface criando uma classe adaptadora em vez de modificar a classe original.
- O padrão adaptador pode ser implementado por meio de adaptador de classe ou adaptador de objeto.
2. Características e Vantagens do Padrão Adaptador
O padrão Adaptador possui as seguintes características e vantagens:
- Fornece uma solução para conversão de interface, permitindo que classes incompatíveis trabalhem juntas.
- Pode aumentar a flexibilidade e escalabilidade do sistema.
- Pode reutilizar classes existentes, reduzindo a duplicação de código e os custos de desenvolvimento.
- Fornece uma solução de design com acoplamento frouxo, tornando o sistema mais flexível e mais fácil de manter.
3. Cenários de Aplicação do Padrão Adaptador
O padrão Adaptador é comumente usado nos seguintes cenários:
- Quando há a necessidade de usar uma classe existente, mas sua interface não atende aos requisitos.
- Quando há a necessidade de criar uma classe reutilizável que possa trabalhar com interfaces incompatíveis.
- Quando há a necessidade de realizar a conversão de interface entre várias classes.
4.1 Diagrama de Classe UML
4.2 Passo 1 de Implementação: Projetando a Interface do Adaptador
pacote principal
type Alvo interface {
Solicitação()
}
4.3 Passo 2 de Implementação: Implementando a Classe Adaptadora
pacote principal
type Adaptee struct {
}
func (a *Adaptee) SolicitacaoEspecifica() {
// Implementar funcionalidade específica da classe Adaptee
}
type Adaptador struct {
adaptado *Adaptee
}
func NovoAdaptador() *Adaptador {
retornar &Adaptador{adaptado: &Adaptee{}}
}
func (a *Adaptador) Solicitacao() {
a.adaptado.SolicitacaoEspecifica()
}
4.4 Passo 3 de Implementação: Código do Cliente Chamando o Padrão Adaptador
pacote principal
func principal() {
adaptador := NovoAdaptador()
adaptador.Solicitação()
}
5.1 A Diferença e a Conexão entre o Padrão Adaptador e o Padrão Bridge
Tanto o padrão Adaptador quanto o padrão Bridge podem ser usados para lidar com a questão da interface entre duas classes diferentes, mas a principal diferença está em:
- O padrão Adaptador concentra-se principalmente na conversão de compatibilidade entre duas interfaces existentes.
- O padrão Bridge concentra-se principalmente na separação da abstração e implementação, alcançando o desacoplamento por meio da ponte entre a interface e a classe de implementação.
5.2 Aplicação do Padrão Adaptador na Arquitetura de Microservices
Em uma arquitetura de microservices, diferentes microservices podem usar interfaces diferentes para comunicação. O padrão adaptador pode nos ajudar a resolver problemas de compatibilidade entre diferentes serviços, permitindo que trabalhem juntos.
5.3 Aplicação do Padrão Adaptador no Desenvolvimento Separado de Front-End e Back-End
No desenvolvimento separado de front-end e back-end, o front-end geralmente precisa recuperar dados do back-end, mas as interfaces expostas pelo back-end podem não atender aos requisitos do front-end. O padrão adaptador pode nos ajudar a adaptar as interfaces do back-end para as interfaces esperadas pelo front-end, alcançando uma colaboração perfeita entre o front-end e o back-end.