Padrão Adapter
Projeto de Sistemas de
Software(PSS)
Baldoino F. dos S. Neto
Propósito
• “Converte a interface de uma classe
em outra interface, esperada pelos
clientes. O Adapter permite que
classes com interfaces imcompatíveis
trabalhem em conjunto – o que, de
outra forma, seria impossível”
© LES/PUC-Rio
Motivação
• Suponha que você tem um sistema
que usa o componente A
Interfaces
compatíveis
Componente
A
Seu
sistema
© LES/PUC-Rio
Motivação
• Porém o fornecedor do componente A
faliu…
• Você precisa utilizar o componente de
outro fornecedor
Componente
A
Seu
sistema
© LES/PUC-Rio
Motivação
• Porém, o fornecedor do componente B
oferece uma interface incompatível
com o seu sistema
Interfaces
incompatíveis
Componente
B
Seu
sistema
© LES/PUC-Rio
Motivação
• Para não correr riscos, você cria um
adaptador
Interfaces
compatíveis
Seu
sistema
Sem alteração
de código
Adaptador
Código novo
© LES/PUC-Rio
Interfaces
compatíveis
Componente
B
Sem alteração
de código
Aplicabilidade
• Utilizamos quando:
– Desejamos utilizar uma classe existente e
sua interface não combina com o que
precisamos;
– Desejamos criar uma classe reutilizável
que coopere com classes que apresentam
interfaces incompatíveis.
© LES/PUC-Rio
Estrutura
© LES/PUC-Rio
Estrutura
© LES/PUC-Rio
Participantes
• Target
– Define a interface específica do domínio que o cliente
utiliza.
• Client
– Interage com objetos de acordo com a interface Target.
• Adaptee
– Define uma interface existente que precisa ser adaptada.
• Adapter
– Adapta a interface de Adaptee para Target
© LES/PUC-Rio
Colaborações
• Cliente invoca operações de Adaptee
através de uma instância de Adapter.
© LES/PUC-Rio
Conseqüências
• Class Adapter
– Permite que Adapter substitua algum comportamento de
Adaptee, uma vez que Adapter é uma subclasse de
Adaptee;
– Adapta Adaptee para Target através do uso efetivo de
uma classe Adaptee concreta. Em conseqüência, um
adaptador de classe não funcionará quando quisermos
adaptar uma classe e todas as suas subclasses.
• Object Adapter
– Permite que um único Adapter trabalhe com vários
Adaptee. Logo, Adapter pode acrescentar funcionalidade
a todos os Adaptee de uma só vez;
– Torna mais difícil redefinir um comportamento de
Adaptee. Ele exigirá a criação de subclasses de Adaptee
e fará com que Adapter referencie a subclasse ao invés
de Adaptee em si.
Exemplo
© LES/PUC-Rio
Exemplo
Fim!!
Download

Adapter - (LES) da PUC-Rio