SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

Mais procurados

CONEXÃO BANCO DE DADOS MYSQL COM JAVA
CONEXÃO BANCO DE DADOS MYSQL  COM JAVACONEXÃO BANCO DE DADOS MYSQL  COM JAVA
CONEXÃO BANCO DE DADOS MYSQL COM JAVA
ETEC Monsenhor Antonio Magliano
 
Ch8.testing
Ch8.testingCh8.testing
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
Daniel Arndt Alves
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
Felipe J. R. Vieira
 
Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with Mockito
Richard Paul
 
Apostila de uml
Apostila de umlApostila de uml
Apostila de uml
audiclerio
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
Sedu
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
Eliseu Castelo
 
Fundamentos de Testes de Software
Fundamentos de Testes de SoftwareFundamentos de Testes de Software
Fundamentos de Testes de Software
Álvaro Farias Pinheiro
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
Armando Daniel
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
Cleyton Ferrari
 
Uml
UmlUml
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitos
elliando dias
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
Ludimila Monjardim Casagrande
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
Armando Daniel
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
Ludimila Monjardim Casagrande
 
Teste de software
Teste de softwareTeste de software
Teste de software
COTIC-PROEG (UFPA)
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de Uso
Natanael Simões
 
Junit
JunitJunit
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade
Camilo Ribeiro
 

Mais procurados (20)

CONEXÃO BANCO DE DADOS MYSQL COM JAVA
CONEXÃO BANCO DE DADOS MYSQL  COM JAVACONEXÃO BANCO DE DADOS MYSQL  COM JAVA
CONEXÃO BANCO DE DADOS MYSQL COM JAVA
 
Ch8.testing
Ch8.testingCh8.testing
Ch8.testing
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with Mockito
 
Apostila de uml
Apostila de umlApostila de uml
Apostila de uml
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
 
Fundamentos de Testes de Software
Fundamentos de Testes de SoftwareFundamentos de Testes de Software
Fundamentos de Testes de Software
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Uml
UmlUml
Uml
 
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitos
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de Uso
 
Junit
JunitJunit
Junit
 
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade
 

Destaque

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
Vinícius de Paula
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
Matheus Andrade
 
Introducao - Engenharia de Software
Introducao - Engenharia de SoftwareIntroducao - Engenharia de Software
Introducao - Engenharia de Software
Eduardo Mendes
 
Html - Aula 3
Html - Aula 3Html - Aula 3
Html - Aula 3
Eduardo Mendes
 
# 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
Fábio Cândido de Jesus
 
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
Messias 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 Software
Eduardo Mendes
 
Apostila `profissional cftv
Apostila `profissional cftvApostila `profissional cftv
Apostila `profissional cftv
Abelardo Borges Rodrigues Neto
 
Guia do cftv básico
Guia do cftv   básicoGuia do cftv   básico
Guia do cftv básico
Erivan Andrade
 
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
Eduardo Mendes
 
Html Aula 1 Parte 1
Html  Aula 1 Parte 1Html  Aula 1 Parte 1
Html Aula 1 Parte 1
Eduardo Mendes
 
Desenvolvimento agil de_software
Desenvolvimento agil de_softwareDesenvolvimento agil de_software
Desenvolvimento agil de_software
Eduardo Mendes
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
Eduardo 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 2
Eduardo Mendes
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e Estrategias
Eduardo Mendes
 
Rails - parte 1
Rails - parte 1Rails - parte 1
Rails - parte 1
Eduardo 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 2
Eduardo Mendes
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1
Eduardo Mendes
 
Html Aula 1 - parte 2
Html Aula 1 - parte 2Html Aula 1 - parte 2
Html Aula 1 - parte 2
Eduardo Mendes
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
Eduardo Mendes
 

Destaque (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
 

Semelhante a Padrão Adapter

Apresentaodesignpatterns1 110109115005-phpapp02
Apresentaodesignpatterns1 110109115005-phpapp02Apresentaodesignpatterns1 110109115005-phpapp02
Apresentaodesignpatterns1 110109115005-phpapp02
Nádia Rodrigues
 
Apresentação Design Adaptador
Apresentação Design AdaptadorApresentação Design Adaptador
Apresentação Design Adaptador
robson 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 - C
Paulo 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 Objetos
Moises Omena
 
A Revolução dos Middlewares
A Revolução dos MiddlewaresA Revolução dos Middlewares
A Revolução dos Middlewares
Paulo Eduardo Rezende
 
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 polimorfismo
Maurício Linhares
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
Maurício Linhares
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
Julio Viegas
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
Rafael Farias Silva
 
Git, GitHub e OO
Git, GitHub e OOGit, GitHub e OO
Git, GitHub e OO
DouglasSoaresAndrSch
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
Maurício Linhares
 
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
Diego Tremper
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016
Leandro 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 Java
elliando dias
 
Aula4
Aula4Aula4
Aula4
fkimura
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Michael Castillo Granados
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Impacta 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 virtual
Michael Castillo Granados
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
Cinthia Pineroli Galvão
 

Semelhante a Padrão Adapter (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
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 

Mais 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 Objetos
Eduardo Mendes
 
AngularJS - Rotas
AngularJS - RotasAngularJS - Rotas
AngularJS - Rotas
Eduardo Mendes
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
Eduardo Mendes
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
Eduardo Mendes
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
Eduardo Mendes
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
Eduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
Eduardo Mendes
 
ExtJS-4
ExtJS-4ExtJS-4
Jquery 2
Jquery 2Jquery 2
Jquery 2
Eduardo Mendes
 
Jquery
JqueryJquery
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
Eduardo 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 2
Eduardo 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
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
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
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
Eduardo Mendes
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
Eduardo Mendes
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
Eduardo Mendes
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
Eduardo Mendes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
Eduardo Mendes
 

Mais 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

  • 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