Permite cambiar la interfase de un modulo de software, de tal manera que los clientes interactuan con la interfase sin tener que conocer la estructura del modulo adaptado.
Se tiene una clase que proporciona metodos necesarios para realizar ciertas actividades. Se necesita integrarla con un nuevo modulo de software, el cual puede adoptar nuevos modulos si y solo si se declaran a implantar el servicio que necesita el nuevo modulo.
El diagrama UML es el siguiente:
Se tiene una clase que con metodos predifinidos
public class LoQueTengo { .... }See the complete code for LoQueTengo here.
public void g() { System.out.println("Metodo g");} public void h() { System.out.println("Metodo h");}
Se necesita usar dentro de una clase que espera una interfase LoQueQuiero
public class LoQueUso { .... }See the complete code for LoQueUso here.
public void op(LoQueQuiero wiw) { wiw.f(); }
La interfase LoQueQuiero define el siguiente contrato
public interface LoQueQuiero { .... }See the complete code for LoQueQuiero here.
public void f();
Con el fin de que la clase LoQueTengo sea utilizada por el modulo LoQueQuiero, se puede definir una nueva clase que se comprometa a implantar el contrato de la interfase LoQueQuiero y que por medio de delegacion utilice los metodos de la clase LoQueTengo. La clase se denomina Adaptado:
public class Adaptador implements LoQueQuiero { .... }See the complete code for Adaptador here.
private LoQueTengo delegado=new LoQueTengo(); public void f(){ delegado.g(); delegado.h(); }
La clase ClienteAdaptador combina las clases anteriores
public class ClienteAdaptador { .... }See the complete code for ClienteAdaptador here.
public static void main(String [] args) { LoQueUso u = new LoQueUso(); Adaptador a = new Adaptador(); u.op(a); }