Desacopla la abstraccion de su implantancion de tal manera que es posible que varien de manera independiente
Supongase que se necesita desacoplar una Abstraccion con respecto a una Implantacion, debido a que se necesita sustituir diferentes Implantaciones para una Abstraccion dada sin causar ningun impacto en un Cliente que llama.
Se realiza proporcionando una clase Abstraccion que delega la implantacion de sus servicios a una interfaz Implandora, la cual es refinada por una jerarquia de Implantadoras concretas El diagrama UML es el siguiente:
Se oculta o encapsula los detalles de la implantacion al cliente Se logra un acoplamiento debil gracias a que se separa la interfase de la implantacion Se pueden crear jerarquias independientes de interfases e implantaciones
Se tiene una jerarquia de Lectores
public class Lector { .... }See the complete code for Lector here.
private LectorImplIF imp= new LectorPrueba(); public String leer(){ return imp.trabajar(); }
public class LectorRemoto extends Lector { .... }See the complete code for LectorRemoto here.
private LectorRemotoImplIF imp= new LectorHTTP(); public String leer(){ imp.extraer(); return imp.trabajar(); }
Y una jerarquia de interfases que pueden utilizarse para implantar al sistema de lectores
public interface LectorImplIF { .... }See the complete code for LectorImplIF here.
public String trabajar();
public interface LectorRemotoImplIF { .... }See the complete code for LectorRemotoImplIF here.
public void extraer(); public String trabajar();
Las clases que implantan a las interfases son las siguientes
public class LectorPrueba implements LectorImplIF { .... }See the complete code for LectorPrueba here.
private String cadena="Hola Bridge"; public String trabajar() { return cadena; }
public class LectorPrueba2 implements LectorImplIF { .... }See the complete code for LectorPrueba2 here.
private String cadena="Hola Bridge"; public String trabajar() { return cadena.toUpperCase(); }
public class LectorHTTP implements LectorRemotoImplIF { .... }See the complete code for LectorHTTP here.
private String cadena; private String url; public String trabajar() { return cadena; } public void extraer() { }
Y el codigo del cliente, utiliza la clase Lector, ya sea para hacer pruebas de concepto o para usar una implantacion con un sistema real
public class ClienteBridge { .... }See the complete code for ClienteBridge here.
public static void main(String [] args) { Lector lect=null ; if (args[0].equals("T") ) { lect = new Lector(); } else if (args[0].equals("R") ){ lect = new LectorRemoto(); } if (lect!=null) { System.out.println(lect.leer()); } }