SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Adapter Pattern
Apprentiship Program
2020
Laura Gonzalez
www.lauragonzafer.com
● Culo inquieto por naturaleza
● Apasionada de los videojuegos
Laura Gonzalez Fernandez
Software Engineer in training at LifullConnect
Index of contentIntroduction
¿Que son los Design Pattern?
Problema a resolver
Adapter Pattern
¿Que es el Adapter Pattern?
Como lo aplicamos
Ejemplo con Codigo
Conclusion
Q&A
Contenidos
¿ Que son los Design Patterns ?
A grandes rasgos, los Design Patterns son
unas técnicas para resolver problemas
comunes en el desarrollo de software.
¿ Que son los Design Patterns ?
Tienen que poseer ciertas características:
● Se debe haber comprobado su EFECTIVIDAD
resolviendo problemas similares en otras ocasiones
anteriores
● Debe ser REUTILIZABLE , lo que significa que se puede
aplicar a diferentes problemas de diseño en distintas
circunstancias
Tenemos una pequeña aplicación que genera cantos de
pájaro y lecciones de vuelo. Para generarlo necesitas
una lista de “Bird” que nos es proporcionada, donde
nos llegan nuestros objetos “Sparrow” y “Canary”, que
implementa la interfaz “Bird”, y poseen los métodos
“Fly” y “Sing”
Problema a resolver
La aplicación tiene que ampliarse y ahora también
tenemos que incluir los objetos “Bat”, “Duck” y
“MagicPotato”, que no parecen tener las funciones tal y
como las necesitamos, además de que no pueden ser
modificados para encajar en nuestro desarrollo
Problema a resolver
Adapter Pattern
El Adapt Pattern nos permite crear una clase “adapter”
que haga de intermediario entre nuestra interfaz y las
nuevas clases.
Con ello podemos “simular” el comportamiento que ya
teníamos sin modificar las nuevas clases.
¿Que es el Adapt Pattern?
Nuestro “adapter” funcionara como un adaptador de
corriente.
¿Que es el Adapt Pattern?
Si queremos enchufar un aparato con un conector
eléctrico europeo a una toma de corriente japonesa ,
necesitaremos un “Adaptador” que simule las
características que necesitamos para conectarnos y nos
de las “órdenes” que podamos entender para funcionar.
¿Que es el Adapt Pattern?
Como lo aplicamos
Como lo aplicamos
Ejemplo con Código
public interface Bird {
public String fly ();
public String sing();
}
Interfaz Bird
Esta es la interface que
agrupa todos los
objetos de tipo Bird
Con ella podemos
acceder a los métodos
fly y sing que devuelven
un string con el texto de
las canciones o
lecciones de vuelo de
ese Bird
public class Canary implements Bird{
public String fly()
{
return " Flying like a canary";
}
public String sing()
{
return "Melodious PIO PIO";
}
}
Clase Canary que
implementa Bird
Esta clase es una tipo
Bird y por tanto tiene
las dos funciones que
hereda de este.
public class MagicPotato {
public String rolling()
{
return "rolling potato";
}
public String talk()
{
return "Magic potato RULES";
}
}
MagicPotato
Esta es una clase
nueva a implantar que
no puede ser
modificada y no
implementa Bird con
lo cual no tiene los
métodos de esta y los
que ya tiene creados
no se llaman igual con
lo que la implantación
actual no los
reconocerá.
public class MagicPotato_Adapter implements Bird {
private MagicPotato potato;
public MagicPotato_Adapter(MagicPotato potato) {
this.potato = potato;
}
@Override
public String fly() {
return potato.rolling();
}
@Override
public String sing() {
return potato.talk();
}
}
MagicPotato_Adapter
implementa Bird
Esta es la clase
Adaptador que SI
implementa Bird y por
tanto puede hacer de
“puente” entre nuestra
implantación y la nueva
clase.
Mediante este adaptador
falseamos los métodos
de la interfaz llamando a
los necesarios en la clase
MagicPotato.
Bat
Esta es una clase
nueva a implantar, al
igual que MagicPotato
no puede implementar
Bird y tiene funciones
que no encajan con
las de nuestra
implantacion.
public class Bat {
private int singOk;
private int flyOk;
public Bat() { this.singOk = 0;this.flyOk = 0; }
public String fly(){
if (flyOk == 3){flyOk = 0;return "Fliying in the Darkness";}
flyOk = 0;
return "";
}
public void stopSingign(){flyOk ++; }
public void startToRun(){ flyOk ++;}
public void warmyourWings(){flyOk ++;}
public String makeSound(){
if (singOk == 3){singOk = 0;return "I am the Night";}
singOk = 0;
return "";
}
public void StopFlying(){ singOk ++; }
public void sitDown(){ singOk ++; }
public void warmVoice(){ singOk ++;}
}
Bat_Adapter
implementa Bird
Esta es la clase
Adaptador que SI
implementa Bird y por
tanto puede hacer de
“puente” entre nuestra
implantación y la nueva
clase.
Mediante este adaptador
falseamos los métodos
de la interfaz llamando a
los que son necesarios
para que tengamos el
mismo resultado que en
las otras clases.
public class Bat_Adapter implements Bird {
private Bat batsy;
public Bat_Adapter(Bat batsy) { this.batsy = batsy;}
@Override
public String fly() {
batsy.stopSingign();
batsy.startToRun();
batsy.warmyourWings();
return batsy.fly();
}
@Override
public String sing() {
batsy.stopFlying();
batsy.sitDown();
batsy.warmVoice();
return batsy.makeSound();
}
}
@Test
public void create_a_Melody() {
Bird isCaptain = new Sparrow();
Bird canary = new Canary();
Bird batsy = new Bat_Adapter(new Bat());
Bird donald = new Duck_Adapter(new Duck());
Bird potato = new MagicPotato_Adapter(new MagicPotato());
Melody melody = new Melody();
Melody melodyExpected = new Melody("I am the Night
Melodious PIO PIO Cuack Cuack Magic potato RULES Chirp
Chirp");
assertEquals( melody.createSong(new Bird[]{isCaptain,
canary, batsy, donald, potato}),melody.melody);
}
Test Create_a_Melody
Test que comprueba
que la implantación
nueva funciona
correctamente al crear
una canción.
@Test
public void teach_Flylessons(){
Bird isCaptain = new Sparrow();
Bird canary = new Canary();
Bird batsy = new Bat_Adapter(new Bat());
Bird donald = new Duck_Adapter(new Duck());
Bird potato = new MagicPotato_Adapter(new MagicPotato());
FlyTime flylesson = new FlyTime();
FlyTime flyLessonExpected = new FlyTime("Fliying in the
Darkness Flying like a canary Flying more or less rolling potato
Flying to steal your Bread ");
assertEquals(flyLessonExpected.flyLesson ,
flylesson.createFlylesson(new Bird []
{batsy,canary,donald,potato,isCaptain}));
}
Test teach_Flylessons
Test que comprueba
que la implantación
nueva funciona
correctamente al crear
una leccion de vuelo.
Conclusiones
Concluºsione
s
No intentes reinventar la rueda,
los Design Patterns son tus amigos
Laura Gonzalez Fernandez
www.lauragonzafer.com
Q & A
Muchas Gracias

Más contenido relacionado

Similar a Adapter pattern easy (20)

Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de software
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Hola mundo en los telefonos blacberry
Hola mundo en los telefonos blacberryHola mundo en los telefonos blacberry
Hola mundo en los telefonos blacberry
 
Applets
AppletsApplets
Applets
 
Applets
AppletsApplets
Applets
 
Programación en Java: Applets
Programación en Java: AppletsProgramación en Java: Applets
Programación en Java: Applets
 
Introduccion actionscript
Introduccion actionscriptIntroduccion actionscript
Introduccion actionscript
 
2 f programas
2 f programas2 f programas
2 f programas
 
2 f programas
2 f programas2 f programas
2 f programas
 
Laboratorio interfaces
Laboratorio interfacesLaboratorio interfaces
Laboratorio interfaces
 
Intro. Lenguaje de Programación Java - Algoritmia
Intro. Lenguaje de Programación Java - AlgoritmiaIntro. Lenguaje de Programación Java - Algoritmia
Intro. Lenguaje de Programación Java - Algoritmia
 
Clase
ClaseClase
Clase
 
De zero a 100 con Spring Boot
De zero a 100 con Spring BootDe zero a 100 con Spring Boot
De zero a 100 con Spring Boot
 
Fundamentos de Lenguaje de programacion
Fundamentos de Lenguaje de programacionFundamentos de Lenguaje de programacion
Fundamentos de Lenguaje de programacion
 
Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)
Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)
Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2
 
Manual arduino
Manual arduinoManual arduino
Manual arduino
 
Manual arduino
Manual arduinoManual arduino
Manual arduino
 
Manual arduino
Manual arduinoManual arduino
Manual arduino
 
01 fundamentos-java
01 fundamentos-java01 fundamentos-java
01 fundamentos-java
 

Adapter pattern easy

  • 2. www.lauragonzafer.com ● Culo inquieto por naturaleza ● Apasionada de los videojuegos Laura Gonzalez Fernandez Software Engineer in training at LifullConnect
  • 3. Index of contentIntroduction ¿Que son los Design Pattern? Problema a resolver Adapter Pattern ¿Que es el Adapter Pattern? Como lo aplicamos Ejemplo con Codigo Conclusion Q&A Contenidos
  • 4. ¿ Que son los Design Patterns ? A grandes rasgos, los Design Patterns son unas técnicas para resolver problemas comunes en el desarrollo de software.
  • 5. ¿ Que son los Design Patterns ? Tienen que poseer ciertas características: ● Se debe haber comprobado su EFECTIVIDAD resolviendo problemas similares en otras ocasiones anteriores ● Debe ser REUTILIZABLE , lo que significa que se puede aplicar a diferentes problemas de diseño en distintas circunstancias
  • 6. Tenemos una pequeña aplicación que genera cantos de pájaro y lecciones de vuelo. Para generarlo necesitas una lista de “Bird” que nos es proporcionada, donde nos llegan nuestros objetos “Sparrow” y “Canary”, que implementa la interfaz “Bird”, y poseen los métodos “Fly” y “Sing” Problema a resolver
  • 7.
  • 8.
  • 9. La aplicación tiene que ampliarse y ahora también tenemos que incluir los objetos “Bat”, “Duck” y “MagicPotato”, que no parecen tener las funciones tal y como las necesitamos, además de que no pueden ser modificados para encajar en nuestro desarrollo Problema a resolver
  • 10.
  • 12. El Adapt Pattern nos permite crear una clase “adapter” que haga de intermediario entre nuestra interfaz y las nuevas clases. Con ello podemos “simular” el comportamiento que ya teníamos sin modificar las nuevas clases. ¿Que es el Adapt Pattern?
  • 13. Nuestro “adapter” funcionara como un adaptador de corriente. ¿Que es el Adapt Pattern?
  • 14. Si queremos enchufar un aparato con un conector eléctrico europeo a una toma de corriente japonesa , necesitaremos un “Adaptador” que simule las características que necesitamos para conectarnos y nos de las “órdenes” que podamos entender para funcionar. ¿Que es el Adapt Pattern?
  • 18. public interface Bird { public String fly (); public String sing(); } Interfaz Bird Esta es la interface que agrupa todos los objetos de tipo Bird Con ella podemos acceder a los métodos fly y sing que devuelven un string con el texto de las canciones o lecciones de vuelo de ese Bird
  • 19. public class Canary implements Bird{ public String fly() { return " Flying like a canary"; } public String sing() { return "Melodious PIO PIO"; } } Clase Canary que implementa Bird Esta clase es una tipo Bird y por tanto tiene las dos funciones que hereda de este.
  • 20. public class MagicPotato { public String rolling() { return "rolling potato"; } public String talk() { return "Magic potato RULES"; } } MagicPotato Esta es una clase nueva a implantar que no puede ser modificada y no implementa Bird con lo cual no tiene los métodos de esta y los que ya tiene creados no se llaman igual con lo que la implantación actual no los reconocerá.
  • 21. public class MagicPotato_Adapter implements Bird { private MagicPotato potato; public MagicPotato_Adapter(MagicPotato potato) { this.potato = potato; } @Override public String fly() { return potato.rolling(); } @Override public String sing() { return potato.talk(); } } MagicPotato_Adapter implementa Bird Esta es la clase Adaptador que SI implementa Bird y por tanto puede hacer de “puente” entre nuestra implantación y la nueva clase. Mediante este adaptador falseamos los métodos de la interfaz llamando a los necesarios en la clase MagicPotato.
  • 22. Bat Esta es una clase nueva a implantar, al igual que MagicPotato no puede implementar Bird y tiene funciones que no encajan con las de nuestra implantacion. public class Bat { private int singOk; private int flyOk; public Bat() { this.singOk = 0;this.flyOk = 0; } public String fly(){ if (flyOk == 3){flyOk = 0;return "Fliying in the Darkness";} flyOk = 0; return ""; } public void stopSingign(){flyOk ++; } public void startToRun(){ flyOk ++;} public void warmyourWings(){flyOk ++;} public String makeSound(){ if (singOk == 3){singOk = 0;return "I am the Night";} singOk = 0; return ""; } public void StopFlying(){ singOk ++; } public void sitDown(){ singOk ++; } public void warmVoice(){ singOk ++;} }
  • 23. Bat_Adapter implementa Bird Esta es la clase Adaptador que SI implementa Bird y por tanto puede hacer de “puente” entre nuestra implantación y la nueva clase. Mediante este adaptador falseamos los métodos de la interfaz llamando a los que son necesarios para que tengamos el mismo resultado que en las otras clases. public class Bat_Adapter implements Bird { private Bat batsy; public Bat_Adapter(Bat batsy) { this.batsy = batsy;} @Override public String fly() { batsy.stopSingign(); batsy.startToRun(); batsy.warmyourWings(); return batsy.fly(); } @Override public String sing() { batsy.stopFlying(); batsy.sitDown(); batsy.warmVoice(); return batsy.makeSound(); } }
  • 24. @Test public void create_a_Melody() { Bird isCaptain = new Sparrow(); Bird canary = new Canary(); Bird batsy = new Bat_Adapter(new Bat()); Bird donald = new Duck_Adapter(new Duck()); Bird potato = new MagicPotato_Adapter(new MagicPotato()); Melody melody = new Melody(); Melody melodyExpected = new Melody("I am the Night Melodious PIO PIO Cuack Cuack Magic potato RULES Chirp Chirp"); assertEquals( melody.createSong(new Bird[]{isCaptain, canary, batsy, donald, potato}),melody.melody); } Test Create_a_Melody Test que comprueba que la implantación nueva funciona correctamente al crear una canción.
  • 25. @Test public void teach_Flylessons(){ Bird isCaptain = new Sparrow(); Bird canary = new Canary(); Bird batsy = new Bat_Adapter(new Bat()); Bird donald = new Duck_Adapter(new Duck()); Bird potato = new MagicPotato_Adapter(new MagicPotato()); FlyTime flylesson = new FlyTime(); FlyTime flyLessonExpected = new FlyTime("Fliying in the Darkness Flying like a canary Flying more or less rolling potato Flying to steal your Bread "); assertEquals(flyLessonExpected.flyLesson , flylesson.createFlylesson(new Bird [] {batsy,canary,donald,potato,isCaptain})); } Test teach_Flylessons Test que comprueba que la implantación nueva funciona correctamente al crear una leccion de vuelo.
  • 27. Concluºsione s No intentes reinventar la rueda, los Design Patterns son tus amigos