SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
PADRÃO ADAPTER
Padrão Adapter
Pato.java
public interface Pato {
public void grasnar();
public void voar();
}
Subclasse de Pato
PatoSelvagem.java
public class PatoSelvagem implements Pato {
public void grasnar() {
System.out.println("Quack");
}
public void voar() {
System.out.println("Estou voando");
}
}
Peru
public interface Peru {
public void gorgolejar();
public void voar();
}
Subclasse de Peru
PeruSelvagem
public class PeruSelvagem implements Peru {
public void gorgolejar() {
System.out.println("Glu! Glu!");
}
public void voar() {
System.out.println(
"Estou voando uma pequena distância");
}
}
Problemas
  Em uma determinada situação você precisa de
um objeto Peru em tempo de execução ao
invés de um Pato
  Pontos favoráveis
  Você já tem seu sistema orientado a interface e não
para implementação
  Suas variáveis de referência são do tipo da interface
Pato
PeruAdapter
public class PeruAdapter implements Pato {
Peru peru;
public PeruAdapter(Peru peru) {
this.peru = peru;
}
public void grasnar() {
peru.gorgolejar();
}
public void voar() {
for (int i = 0; i < 5; i++) {
peru.voar();
}
}
}
Teste para Pato e Peru
public class PatoTeste {
public static void testarPato(Pato p) {
p.grasnar();
p.voar();
}
public static void main(String[] args) {
PatoSelvagem pato = new PatoSelvagem();
PeruSelvagem peru = new PeruSelvagem();
Pato peruAdaptado = new PeruAdapter(peru);
System.out.println("O peru faz...");
peru.gorgolejar();
peru.voar();
System.out.println("nO pato faz...");
testarPato(pato);
System.out.println("nO Peru Adaptado faz...");
testarPato(peruAdaptado);
}
}
Explicando o Adapter
Um cliente implementado para uma
interface específica (interface-alvo)
requisicao()
Cliente
A
d
a
p
t
a
d
o
Adaptador
Interface alvo
Interface adaptada
O adaptador implementa
a interface-alvo e possui uma
instância do adaptado
Explicando
  O Cliente faz uma solicitação ao adaptador
chamando um método dele através da
interface alvo
  O adaptador traduz a solicitação para uma ou
mais chamadas de métodos no adaptado
usando a interface desse objeto
  O cliente recebe os resultados da chamada
sem jamais perceber que há um adaptador
fazendo a tradução
+1 Padrão
ADAPTER
O Padrão Adapter converte a interface de
uma classe em outra que o cliente espera. O
Adapter permite que classes com interfaces
incompatíveis trabalhem em conjunto – o
que de outra forma seria impossível.
Diagrama de classes
No exemplo do Pato
Exercício
PatoAdapter
PatoAdapter.java
public class PatoAdapter implements Peru {
Pato pato;
public PatoAdapter(Pato pato) {
this.pato = pato;
}
public void gorgolejar() {
pato.grasnar();
}
public void voar() {
pato.voar();
}
}
Adaptadores de Objeto
Adaptadores de Classe
  Adaptador de classe
  Múltipla herança
Adaptadores no mundo real
  Java – Passado   Java – Atualmente
Vector
Stack
Hashtable
elements()
Adaptando um Enumeration
a um Iterator
Adaptando
EnumerationIterator.java
public class EnumerationIterator implements Iterator{
Enumeration enumeration;
public EnumerationIterator(Enumeration enumeration) {
this.enumeration = enumeration;
}
public boolean hasNext() {
return enumeration.hasMoreElements();
}
public Object next() {
return enumeration.nextElement();
}
public void remove() {
throw new UnsupportedOperationException();
}
}
Participantes
  Target (Alvo)
  Define a interface específica que o Client usa
  Client
  Colabora com objetos compatíveis com a interface
Target
  Adaptee (Objeto a ser adaptado)
  Define uma interface existente que necessita ser
adaptada
  Adapter
  Adapta a interface do Adaptee à interface do
Target
Aplicabilidade
  Necessidade de usar uma classe existente, mas sua
interface não corresponde à interface necessária
  Necessidade de criar uma classe reutilizável com
classes não relacionadas ou não previstas, ou seja,
classes que não necessariamente possuam interfaces
compatíveis
  Necessidade de usar várias subclasses existentes,
porém, for impraticável adaptar estas interfaces
criando subclasses para cada uma. Um adaptador
pode adaptar a interface da sua classe mãe
Colaborações
  Os clientes chamam operações em uma
instância de Adapter
  Por sua vez, o Adapter chama operações de
Adaptee que executam a solicitação

Contenu connexe

Tendances

Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoTiago Bencardino
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismoArthur Emanuel
 
Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequenciaItalo Costa
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5César Augusto Pessôa
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Prototipação de software
Prototipação de softwarePrototipação de software
Prototipação de softwareleopp
 
Diagrama de Classe: Relacionamento de Composição
Diagrama de Classe: Relacionamento de ComposiçãoDiagrama de Classe: Relacionamento de Composição
Diagrama de Classe: Relacionamento de ComposiçãomarcusNOGUEIRA
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01 Léo Dias
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções javaAntonio Oliveira
 

Tendances (20)

Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpo
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Classes abstratas e interfaces
Classes abstratas e interfacesClasses abstratas e interfaces
Classes abstratas e interfaces
 
UML - Diagrama de Pacotes
UML - Diagrama de PacotesUML - Diagrama de Pacotes
UML - Diagrama de Pacotes
 
Diagrama sequencia
Diagrama sequenciaDiagrama sequencia
Diagrama sequencia
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequencia
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Prototipação de software
Prototipação de softwarePrototipação de software
Prototipação de software
 
Diagrama de Classe: Relacionamento de Composição
Diagrama de Classe: Relacionamento de ComposiçãoDiagrama de Classe: Relacionamento de Composição
Diagrama de Classe: Relacionamento de Composição
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 
Diagramas de componentes
Diagramas de componentesDiagramas de componentes
Diagramas de componentes
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções java
 

En vedette

Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoVinícius de Paula
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto AdapterMatheus Andrade
 
Introducao - Engenharia de Software
Introducao - Engenharia de SoftwareIntroducao - Engenharia de Software
Introducao - Engenharia de SoftwareEduardo Mendes
 
G gpcwmlguth 02.009.030.004-video_dvr_-_internet
G gpcwmlguth 02.009.030.004-video_dvr_-_internetG gpcwmlguth 02.009.030.004-video_dvr_-_internet
G gpcwmlguth 02.009.030.004-video_dvr_-_internetMessias Castro
 
Evolução de software 1 - Engenharia de Software
Evolução de software 1 - Engenharia de SoftwareEvolução de software 1 - Engenharia de Software
Evolução de software 1 - Engenharia de SoftwareEduardo Mendes
 
Fábrica Simples - Padrões de Projeto
Fábrica Simples - Padrões de ProjetoFábrica Simples - Padrões de Projeto
Fábrica Simples - Padrões de ProjetoEduardo Mendes
 
Desenvolvimento agil de_software
Desenvolvimento agil de_softwareDesenvolvimento agil de_software
Desenvolvimento agil de_softwareEduardo Mendes
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Eduardo Mendes
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e EstrategiasEduardo Mendes
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2Eduardo Mendes
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1Eduardo Mendes
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Eduardo Mendes
 

En vedette (20)

Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de Projeto
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
 
Introducao - Engenharia de Software
Introducao - Engenharia de SoftwareIntroducao - Engenharia de Software
Introducao - Engenharia de Software
 
Html - Aula 3
Html - Aula 3Html - Aula 3
Html - Aula 3
 
# Dvr stand alone maxstand 2 em 1
# Dvr stand alone maxstand 2 em 1# Dvr stand alone maxstand 2 em 1
# Dvr stand alone maxstand 2 em 1
 
G gpcwmlguth 02.009.030.004-video_dvr_-_internet
G gpcwmlguth 02.009.030.004-video_dvr_-_internetG gpcwmlguth 02.009.030.004-video_dvr_-_internet
G gpcwmlguth 02.009.030.004-video_dvr_-_internet
 
Evolução de software 1 - Engenharia de Software
Evolução de software 1 - Engenharia de SoftwareEvolução de software 1 - Engenharia de Software
Evolução de software 1 - Engenharia de Software
 
Apostila `profissional cftv
Apostila `profissional cftvApostila `profissional cftv
Apostila `profissional cftv
 
Guia do cftv básico
Guia do cftv   básicoGuia do cftv   básico
Guia do cftv básico
 
Fábrica Simples - Padrões de Projeto
Fábrica Simples - Padrões de ProjetoFábrica Simples - Padrões de Projeto
Fábrica Simples - Padrões de Projeto
 
Html Aula 1 Parte 1
Html  Aula 1 Parte 1Html  Aula 1 Parte 1
Html Aula 1 Parte 1
 
Desenvolvimento agil de_software
Desenvolvimento agil de_softwareDesenvolvimento agil de_software
Desenvolvimento agil de_software
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e Estrategias
 
Rails - parte 1
Rails - parte 1Rails - parte 1
Rails - parte 1
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1
 
Html Aula 1 - parte 2
Html Aula 1 - parte 2Html Aula 1 - parte 2
Html Aula 1 - parte 2
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
 

Similaire à Padrão Adapter: Adapte interfaces incompatíveis

Apresentaodesignpatterns1 110109115005-phpapp02
Apresentaodesignpatterns1 110109115005-phpapp02Apresentaodesignpatterns1 110109115005-phpapp02
Apresentaodesignpatterns1 110109115005-phpapp02Nádia Rodrigues
 
Apresentação Design Adaptador
Apresentação Design AdaptadorApresentação Design Adaptador
Apresentação Design Adaptadorrobson santiago
 
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - CInterfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - CPaulo Henrique Lerbach Rodrigues
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016Leandro Silva
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Javaelliando dias
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que pareceImpacta Eventos
 
Da Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualDa Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualMichael Castillo Granados
 
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaoTDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaotdc-globalcode
 

Similaire à Padrão Adapter: Adapte interfaces incompatíveis (20)

Apresentaodesignpatterns1 110109115005-phpapp02
Apresentaodesignpatterns1 110109115005-phpapp02Apresentaodesignpatterns1 110109115005-phpapp02
Apresentaodesignpatterns1 110109115005-phpapp02
 
Apresentação Design Adaptador
Apresentação Design AdaptadorApresentação Design Adaptador
Apresentação Design Adaptador
 
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - CInterfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
A Revolução dos Middlewares
A Revolução dos MiddlewaresA Revolução dos Middlewares
A Revolução dos Middlewares
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Git, GitHub e OO
Git, GitHub e OOGit, GitHub e OO
Git, GitHub e OO
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Java
 
Aula4
Aula4Aula4
Aula4
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Da Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualDa Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtual
 
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaoTDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
 

Plus de Eduardo Mendes

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - FundamentosEduardo Mendes
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEduardo Mendes
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails Eduardo Mendes
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Eduardo Mendes
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantesEduardo Mendes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantesEduardo Mendes
 

Plus de Eduardo Mendes (20)

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
AngularJS - Rotas
AngularJS - RotasAngularJS - Rotas
AngularJS - Rotas
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
ExtJS-4
ExtJS-4ExtJS-4
ExtJS-4
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Jquery
JqueryJquery
Jquery
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 

Padrão Adapter: Adapte interfaces incompatíveis

  • 3. Pato.java public interface Pato { public void grasnar(); public void voar(); }
  • 4. Subclasse de Pato PatoSelvagem.java public class PatoSelvagem implements Pato { public void grasnar() { System.out.println("Quack"); } public void voar() { System.out.println("Estou voando"); } }
  • 5. Peru public interface Peru { public void gorgolejar(); public void voar(); }
  • 6. Subclasse de Peru PeruSelvagem public class PeruSelvagem implements Peru { public void gorgolejar() { System.out.println("Glu! Glu!"); } public void voar() { System.out.println( "Estou voando uma pequena distância"); } }
  • 7. Problemas   Em uma determinada situação você precisa de um objeto Peru em tempo de execução ao invés de um Pato   Pontos favoráveis   Você já tem seu sistema orientado a interface e não para implementação   Suas variáveis de referência são do tipo da interface Pato
  • 8. PeruAdapter public class PeruAdapter implements Pato { Peru peru; public PeruAdapter(Peru peru) { this.peru = peru; } public void grasnar() { peru.gorgolejar(); } public void voar() { for (int i = 0; i < 5; i++) { peru.voar(); } } }
  • 9. Teste para Pato e Peru public class PatoTeste { public static void testarPato(Pato p) { p.grasnar(); p.voar(); } public static void main(String[] args) { PatoSelvagem pato = new PatoSelvagem(); PeruSelvagem peru = new PeruSelvagem(); Pato peruAdaptado = new PeruAdapter(peru); System.out.println("O peru faz..."); peru.gorgolejar(); peru.voar(); System.out.println("nO pato faz..."); testarPato(pato); System.out.println("nO Peru Adaptado faz..."); testarPato(peruAdaptado); } }
  • 10. Explicando o Adapter Um cliente implementado para uma interface específica (interface-alvo) requisicao() Cliente A d a p t a d o Adaptador Interface alvo Interface adaptada O adaptador implementa a interface-alvo e possui uma instância do adaptado
  • 11. Explicando   O Cliente faz uma solicitação ao adaptador chamando um método dele através da interface alvo   O adaptador traduz a solicitação para uma ou mais chamadas de métodos no adaptado usando a interface desse objeto   O cliente recebe os resultados da chamada sem jamais perceber que há um adaptador fazendo a tradução
  • 12. +1 Padrão ADAPTER O Padrão Adapter converte a interface de uma classe em outra que o cliente espera. O Adapter permite que classes com interfaces incompatíveis trabalhem em conjunto – o que de outra forma seria impossível.
  • 16. PatoAdapter.java public class PatoAdapter implements Peru { Pato pato; public PatoAdapter(Pato pato) { this.pato = pato; } public void gorgolejar() { pato.grasnar(); } public void voar() { pato.voar(); } }
  • 17. Adaptadores de Objeto Adaptadores de Classe   Adaptador de classe   Múltipla herança
  • 18. Adaptadores no mundo real   Java – Passado   Java – Atualmente Vector Stack Hashtable elements()
  • 21. EnumerationIterator.java public class EnumerationIterator implements Iterator{ Enumeration enumeration; public EnumerationIterator(Enumeration enumeration) { this.enumeration = enumeration; } public boolean hasNext() { return enumeration.hasMoreElements(); } public Object next() { return enumeration.nextElement(); } public void remove() { throw new UnsupportedOperationException(); } }
  • 22. Participantes   Target (Alvo)   Define a interface específica que o Client usa   Client   Colabora com objetos compatíveis com a interface Target   Adaptee (Objeto a ser adaptado)   Define uma interface existente que necessita ser adaptada   Adapter   Adapta a interface do Adaptee à interface do Target
  • 23. Aplicabilidade   Necessidade de usar uma classe existente, mas sua interface não corresponde à interface necessária   Necessidade de criar uma classe reutilizável com classes não relacionadas ou não previstas, ou seja, classes que não necessariamente possuam interfaces compatíveis   Necessidade de usar várias subclasses existentes, porém, for impraticável adaptar estas interfaces criando subclasses para cada uma. Um adaptador pode adaptar a interface da sua classe mãe
  • 24. Colaborações   Os clientes chamam operações em uma instância de Adapter   Por sua vez, o Adapter chama operações de Adaptee que executam a solicitação