Adapter se relaciona a muitos outros padrões pela semelhança entre as implementações. O padrão mais fácil de confundir com Adapter é o padrão Proxy. Enquanto o Adapter visa apenas traduzir contratos entre o cliente e o objeto final o Proxy visa poder interferir entre a chamada do cliente e a execução do objeto real.Normalmente sem, sequer, alterar o contrato no caminho.
O padrão Decorator, também conhecido como Wrapper, é um tipo especial de Adapter. Ele não visa traduzir contratos mas sim aumentar o numero de operações possíveis com base num tipo previamente existente. Ou seja, o Decorator adiciona um contrato que não existia antes a um que existia. Na API do Java SE as classes filhas de Number
, Character
e Boolean
são Decorator de tipos primitivos. Obviamente as interfaces são diferentes já que as classes Decorator adicionam novas operações uteis não disponiveis no contrato dos tipos primitivos correspondentes.
O padrão Adaptor comunica apenas com um outro objeto e nunca com um conjunto de objetos. Nesse caso estaremos na presença de um Façade que visa simplificar a utilização de um conjunto de objetos encapsulando as operações mais comuns com esses objetos. Embora esteja sendo feita uma tradução de contratos, Façade vai um pouco mais além introduzindo uma logica de cooperação entre os objetos chamados.
A tabela a seguir tentar resumir as relações
|
Mapeia Contratos |
Altera Contrato |
Adiciona lógica |
Comunica com mais que um objeto |
Adapter |
x |
|
|
|
Decorator |
x |
x |
|
|
Proxy |
x |
|
x |
|
Façade |
x |
x |
x |
x |