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

Padrão Adaptador Golang

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.