Adapter × Facade

Dois padrões que costumam ser trocados um pelo outro, e o que de fato os separa.

Em uma frase

Adapter é sobre compatibilidade: traduz uma interface que existe para outra que o cliente espera. Facade é sobre conveniência: cria uma interface nova e menor sobre várias peças.

Critério a critério

  • Quantos objetos por trás?

    Adapter
    Normalmente um — é uma tradução de contrato, quase sempre 1 para 1.
    Facade
    Vários — é uma coreografia, 1 para muitos.
  • A interface já existia?

    Adapter
    Sim, dos dois lados. Você concilia duas que não se encaixam.
    Facade
    Não. Você inventa uma, de nível mais alto que as internas.
  • Por que existe?

    Adapter
    Remediação: algo incompatível precisa funcionar junto.
    Facade
    Simplificação: alguém não deveria precisar conhecer o subsistema.
  • Dá para usar o que está por trás?

    Adapter
    Em geral não interessa — o adaptado só existe para ser adaptado.
    Facade
    Sim, e isso é desejável: a facade é porta, não muralha.

Quando escolher cada um

Adapter

Você tem duas interfaces incompatíveis e precisa que conversem sem alterar nenhuma.

Ver o conceito completo

Facade

Vários clientes repetem a mesma sequência de chamadas a um subsistema complexo.

Ver o conceito completo

Por que confundem

Ambos são 'uma classe no meio que simplifica minha vida', e por isso o nome vira intercambiável nas conversas. O teste rápido: se você removesse a classe do meio, o cliente teria um problema de encaixe (tipos incompatíveis) ou de quantidade (teria que chamar seis coisas na ordem certa)? Encaixe é Adapter; quantidade é Facade.