El patrón adaptador se utiliza para transformar una interfaz en otra, de tal modo que una clase que no pueda utilizar la primera haga uso de ella a través de la segunda.
Convierte la interfaz de una clase en otra interfaz que el cliente espera. El adaptador permite a las clases trabajar juntas, lo que de otra manera no podría hacerse debido a sus interfaces incompatibles.
Es recomendable utilizar el patrón adaptador cuando:
Los adaptadores de clase y objetos tienen varios pros y contras.
Aquí hay otras cuestiones a considerar cuando se utiliza el patrón Adapter:
Crear una nueva clase que será el Adaptador, que extienda del componente existente e implemente la interfaz obligatoria. De este modo se tiene la funcionalidad que se quería y se cumple la condición de implementar la interfaz.
La diferencia entre los patrones adaptador y fachada (facade) es que el primero reutiliza una interfaz ya existente, mientras que el segundo define una nueva con el objetivo de simplificarla.
package Structural_patterns;
public class AdapterWrapperPattern {
/**
* Client: Uses (and only knows) Target Interface
*/
public static void main(String args[]){
Guitar eGuitar = new ElectricGuitar();
eGuitar.onGuitar();
eGuitar.offGuitar();
Guitar eAGuitar = new ElectricAcousticGuitar();
eAGuitar.onGuitar();
eAGuitar.offGuitar();
}
/**
* Target: Class used by the Client
*/
public interface Guitar{
public void onGuitar();
public void offGuitar();
}
/**
* Direct Target Implementation: Already Adapted/Wrapped
*/
public class ElectricGuitar implements Guitar{
public void onGuitar() {
System.out.println("Playing Guitar");
}
public void offGuitar() {
System.out.println("I'm tired to play the guitar");
}
}
/**
* Adaptee: Class to Adapter/Wrapper
*/
public class AcousticGuitar{
public void play(){
System.out.println("Playing Guitar");
}
public void leaveGuitar(){
System.out.println("I'm tired to play the guitar");
}
}
/**
* Adapter/Wrapper: We Adapter/Wrapper AcousticGuitar into
* ElectricAcousticGuitar to adapt into the Guitar Model
*/
public class ElectricAcousticGuitar implements Guitar{
AcousticGuitar acoustic = new AcousticGuitar();
public void onGuitar() {
acoustic.play();
}
public void offGuitar() {
acoustic.leaveGuitar();
}
}
}