SlideShare uma empresa Scribd logo
1 de 14
Design Patterns
Padrão adaptador	 Se resume em converter uma interface de uma classe para outra interface que o cliente espera encontrar. O adaptador permite que classes com interfaces incompatíveis trabalhem juntas.
   Classe A                   Adaptador            Classe B
public interface Pato { publicvoidquack(); publicvoidfly(); 		 	 }
public class PatoBravo implements Pato { 	@Override publicvoidquack() { 		System.out.println("Quack"); 	} 	@Override publicvoidfly() { 		System.out.println("Fly"); 	} }
public interface Peru { publicvoid gorgolejar(); publicvoidfly(); }
public class PeruComumimplements Peru { 	@Override publicvoid gorgolejar() { 		System.out.println("Glu - Glu"); 	} 	@Override publicvoidfly() { 		System.out.println("Peru comum voando"); 	} }
publicclassPeruAdaptadorimplements Pato { private Peru peru; publicPeruAdaptador(Peru peru) { this.peru = peru; 	} 	@Override publicvoidquack() { 		peru.gorgolejar(); 	} 	@Override publicvoidfly() { 		for (int i = 0; i < 5; i++) { 			peru.fly(); 		} 	} }
publicclassPatoTest { 	public static void main(String[] args) { PatoBravopatoBravo = newPatoBravo(); PeruComumperuComum= newPeruComum(); 		Pato peruAdaptado = newPeruAdaptador(peruComum); 		System.out.println("Testando peru comum"); peruComum.gorgolejar(); peruComum.fly(); 		System.out.println("Testando o pato bravo"); testPato(patoBravo); 		System.out.println("Testando o peru disfarçado de pato"); testPato(peruAdaptado); staticvoidtestPato(Pato pato){ 		pato.quack(); 		pato.fly();}
Testando peru adaptado Glu - Glu 	Peru adaptado Testando o pato bravo	 Quack Fly Testando o peru disfarçado de pato Glu - Glu 	Peru adaptado 	Peru adaptado 	Peru adaptado 	Peru adaptado 	Peru adaptado
Existe também o adaptador de classes, porem não é possível utiliza-lo com o java. O motivo é que ele requer herança multipla, o que até então ainda não é possível no java. A principal diferença é que ao invés de  utilizar a composição como faz o adaptador de objetos, o adaptador de classes utiliza a herança, assim podendo ter acesso as chamadas do métodos.
Adaptadores do mundo real Enumeration hasMoreElements() nextElement() ,[object Object],hasNext() next() 	remove()
public class EnumerationIterator implements Iterator<Object> { privateEnumeration<Object> enumeration; publicEnumerationIterator(Enumeration<Object> enumeration)  this.enumeration = enumeration; 	@Override publicbooleanhasNext()  returnenumeration.hasMoreElements(); 	@Override publicObjectnext()  returnenumeration.nextElement(); 	@Override publicvoid remove() { thrownewUnsupportedOperationException(); }
Obrigado !

Mais conteúdo relacionado

Mais procurados

Java recursos avançados - socket connection
Java   recursos avançados - socket connectionJava   recursos avançados - socket connection
Java recursos avançados - socket connectionArmando Daniel
 
Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Diego Pacheco
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Rogério Moraes de Carvalho
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...Rogério Moraes de Carvalho
 
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
 
Design Patterns na Programação de Jogo
Design Patterns na Programação de JogoDesign Patterns na Programação de Jogo
Design Patterns na Programação de JogoBruno Cicanci
 
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...iMasters
 
Oficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptOficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptRaphael Donaire Albino
 
Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Diego Pacheco
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portuguesLaura
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoAnderson Ledo
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)Rogério Moraes de Carvalho
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3Jose Berardo
 

Mais procurados (19)

Java recursos avançados - socket connection
Java   recursos avançados - socket connectionJava   recursos avançados - socket connection
Java recursos avançados - socket connection
 
Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02
 
Testes em go
Testes em goTestes em go
Testes em go
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
5423 c ou c++
5423 c ou c++5423 c ou c++
5423 c ou c++
 
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
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Design Patterns na Programação de Jogo
Design Patterns na Programação de JogoDesign Patterns na Programação de Jogo
Design Patterns na Programação de Jogo
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
[JS EXPERIENCE 2018] Uma visão geral sobre recursão e trampolines - Ana Basto...
 
Oficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptOficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScript
 
Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
 
Novidades do Java 8
Novidades do Java 8Novidades do Java 8
Novidades do Java 8
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3
 

Destaque

Destaque (8)

Perfam
PerfamPerfam
Perfam
 
Eduardo
EduardoEduardo
Eduardo
 
Mon itinéraire
Mon itinéraireMon itinéraire
Mon itinéraire
 
La nuevas sociedad tecnológica
La nuevas sociedad tecnológicaLa nuevas sociedad tecnológica
La nuevas sociedad tecnológica
 
Cogito 0
Cogito 0Cogito 0
Cogito 0
 
El tenis
El tenisEl tenis
El tenis
 
FIEP palestra gerentes 25-09-2014
FIEP palestra gerentes 25-09-2014FIEP palestra gerentes 25-09-2014
FIEP palestra gerentes 25-09-2014
 
U
UU
U
 

Semelhante a Padrão adaptador converte interfaces incompatíveis

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
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
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
 
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
 
Design fachada e Método Gabarito
Design fachada e Método GabaritoDesign fachada e Método Gabarito
Design fachada e Método Gabaritorobson santiago
 
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
 
Android DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidAndroid DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidiMasters
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYraquelcarsi
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Willian Magalhães
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DPaulo Henrique Lerbach Rodrigues
 
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
 

Semelhante a Padrão adaptador converte interfaces incompatíveis (20)

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
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Git, GitHub e OO
Git, GitHub e OOGit, GitHub e OO
Git, GitHub e OO
 
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
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
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
 
Design fachada e Método Gabarito
Design fachada e Método GabaritoDesign fachada e Método Gabarito
Design fachada e Método Gabarito
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
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 ...
 
Android DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidAndroid DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos Android
 
A Revolução dos Middlewares
A Revolução dos MiddlewaresA Revolução dos Middlewares
A Revolução dos Middlewares
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITY
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Padrão de Projeto Facade
Padrão de Projeto FacadePadrão de Projeto Facade
Padrão de Projeto Facade
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
 
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
 

Padrão adaptador converte interfaces incompatíveis

  • 2. Padrão adaptador Se resume em converter uma interface de uma classe para outra interface que o cliente espera encontrar. O adaptador permite que classes com interfaces incompatíveis trabalhem juntas.
  • 3. Classe A Adaptador Classe B
  • 4. public interface Pato { publicvoidquack(); publicvoidfly(); }
  • 5. public class PatoBravo implements Pato { @Override publicvoidquack() { System.out.println("Quack"); } @Override publicvoidfly() { System.out.println("Fly"); } }
  • 6. public interface Peru { publicvoid gorgolejar(); publicvoidfly(); }
  • 7. public class PeruComumimplements Peru { @Override publicvoid gorgolejar() { System.out.println("Glu - Glu"); } @Override publicvoidfly() { System.out.println("Peru comum voando"); } }
  • 8. publicclassPeruAdaptadorimplements Pato { private Peru peru; publicPeruAdaptador(Peru peru) { this.peru = peru; } @Override publicvoidquack() { peru.gorgolejar(); } @Override publicvoidfly() { for (int i = 0; i < 5; i++) { peru.fly(); } } }
  • 9. publicclassPatoTest { public static void main(String[] args) { PatoBravopatoBravo = newPatoBravo(); PeruComumperuComum= newPeruComum(); Pato peruAdaptado = newPeruAdaptador(peruComum); System.out.println("Testando peru comum"); peruComum.gorgolejar(); peruComum.fly(); System.out.println("Testando o pato bravo"); testPato(patoBravo); System.out.println("Testando o peru disfarçado de pato"); testPato(peruAdaptado); staticvoidtestPato(Pato pato){ pato.quack(); pato.fly();}
  • 10. Testando peru adaptado Glu - Glu Peru adaptado Testando o pato bravo Quack Fly Testando o peru disfarçado de pato Glu - Glu Peru adaptado Peru adaptado Peru adaptado Peru adaptado Peru adaptado
  • 11. Existe também o adaptador de classes, porem não é possível utiliza-lo com o java. O motivo é que ele requer herança multipla, o que até então ainda não é possível no java. A principal diferença é que ao invés de utilizar a composição como faz o adaptador de objetos, o adaptador de classes utiliza a herança, assim podendo ter acesso as chamadas do métodos.
  • 12.
  • 13. public class EnumerationIterator implements Iterator<Object> { privateEnumeration<Object> enumeration; publicEnumerationIterator(Enumeration<Object> enumeration) this.enumeration = enumeration; @Override publicbooleanhasNext() returnenumeration.hasMoreElements(); @Override publicObjectnext() returnenumeration.nextElement(); @Override publicvoid remove() { thrownewUnsupportedOperationException(); }