Projeto de Sistemas de Software(PSS) Baldoino F. dos S. Neto 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
Interfaces compatíveis Motivação Suponha que você tem um sistema que usa o componente A Interfaces compatíveis Seu sistema Componente A © LES/PUC-Rio
Motivação Porém o fornecedor do componente A faliu… Você precisa utilizar o componente de outro fornecedor Seu sistema Componente A © LES/PUC-Rio
Interfaces incompatíveis Motivação Porém, o fornecedor do componente B oferece uma interface incompatível com o seu sistema Interfaces incompatíveis Seu sistema Componente B © LES/PUC-Rio
Interfaces compatíveis Interfaces compatíveis Motivação Para não correr riscos, você cria um adaptador Interfaces compatíveis Interfaces compatíveis Seu sistema Adaptador Componente B Sem alteração de código Código novo Sem alteração de código © LES/PUC-Rio
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 Client Adaptee Adapter 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 Object 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!!