Click here to load reader
Upload
juliana-cindra
View
1.340
Download
3
Embed Size (px)
DESCRIPTION
Padrão de Projeto Adapter.
Citation preview
PADRÕES DE PROJETO
- ADAPTER -
Juliana da S. Cindra
2007
Padrão Adapter
Nome: Adapter. Conhecido como: Wrapper e Translator Classificação: Estrutural Propósito
O principal objetivo do Adapter é facilitar a conversão da interface de uma
classe para outra interface mais interessante para o cliente, fazendo com que
várias classes possam trabalhar em conjunto independentemente das interfaces
originais. Às vezes é preciso modificar uma classe que não pode ser alterada
adequadamente devido à falta do código fonte (alguma biblioteca de classes
comercial), ou por alguma outra razão. O Adapter é uma das formas de modificar classes nestas circunstâncias, sendo classificado com a de finalidade estrutural e abrange tanto escopo de classe quanto de objeto.
Adapter
Classificação segundo GoF:Estrutural de Objeto, Classe.
Classificação segundo Metsker
Interface.
Definição:Converte a interface de uma classe em uma outra interface esperada pelos clientes. Permite que classes de interfaces incompatíveis trabalhem juntas.
Motivação
Quando usar Adapter:– Quando uma classe já existente e sua interface
não combinam com a esperada pelo cliente;– Quando se quer criar uma classe reutilizável que
coopera com classes não relacionadas ou não previstas, isto é, classes que não necessariamente tenham interfaces compatíveis;
– Quando necessitar usar várias subclasses existentes, mas é impraticável adaptar suas interfaces fazendo um Subclassing de cada uma.
Motivação Ex: Liberar o objeto cliente de saber dos detalhes.
Supondo que temos os seguintes requisitos:
– Criar classes para pontos, linhas, e quadrados que têm o comportamento “display”.
– Os objetos cliente não devem saber se eles estão lidando com um ponto, uma linha ou um quadrado. Eles apenas sabem que eles têm uma destas formas (“shapes”).
Apesar do sistema ter pontos, linhas e quadrados, eu quero que os objetos cliente pensem que o sistema tem apenas formas (“shapes”).
O que temos O que o cliente vê
Motivação
Como isso deve ser feito?– Definindo a interface Shape e a implementando
apropriadamente nas subclasses.
Suponha que seja requisitado a criação de Círculo, um novo tipo de Shape.
Motivação
Felizmente, eu tenho um amigo que tem uma classe círculo já pronta (XXCircle).
Infelizmente, a classe XXCircle tem os seguintes nomes para suas operações:– displayIt– fillIt– undisplayIt
Eu não posso usar XXCircle porque eu quero preservar o comportamento polimórfico com Shape.
Motivação O que deve ser feito?
– Deve-se criar uma nova classe Circle que: Deriva de Shape e, por conseguinte, implementa sua interface. Circle contém XXCircle. Circle delega requisições feitas para o objeto Circle para o objeto XXCircle. Quando um Circle é instanciado, ele instancia o correspondente XXCircle.
Motivação
Fragmento de código Java:
Estrutura do Padrão Adapter
Participantes:– Cliente: Colabora entre os objetos conforme a interface Alvo.– Alvo: Define a interface de domínio específico que o Cliente utiliza.– Adaptador: Adapta a ClasseExistente para ser utilizada pela classe
Alvo.– ClasseExistente: Define uma interface pré-existente que necessita
ser adaptada.
Estruturas
A Estrutura Class Adapter usa herança múltipla (ou implementação de interface)
Client Targetrequest( )
Adaptee
specificRequest( )
Adapterrequest( )
request(){ this.specificRequest()}
Estruturas
A Estrutura Object Adapter usa composição e delegação.
Client Target
request( )
Adaptee
specificRequest( )
Adapterrequest( )
request(){ this.adaptee->SpecificRequest()}
Conseqüências
Vantagens:– Adapta o Adaptador para o Alvo através de uma
classe concreta. Como conseqüência, uma classe adaptada não funcionará para adaptar uma classe e suas subclasses.
– Deixa o Adaptador sobrepor algum comportamento do adaptado,desde que o Adaptador seja uma subclasse do adaptado.
– Introduz um único objeto e nenhum ponteiro adicional é necessário para chegar ao adaptado.
Desvantagens: -
Bibliografia
http://www.pg.cefetpr.br/coinf/simone/download/TrabalhoFinal.pdf
http://pt.wikipedia.org/wiki/Padr%C3%B5es_de_projeto_de_software– http://pt.wikipedia.org/wiki/Adapter