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 completoFacade
Vários clientes repetem a mesma sequência de chamadas a um subsistema complexo.
Ver o conceito completoPor 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.