Clasificación:
Patrón Estructural.
Propósito:
Separa abstracción e implementación, así ambas pueden variar de forma independiente. A diferencia del patrón Adapter, considera como las interfaces son implementadas, en este sentido asocia abstracción y sus potenciales implementaciones. Suele aplicarse al empezar un diseño, para permitir que las abstracciones e implementaciones evolucionen independientemente.
También Conocido como:
Puente / Cuerpo.
Intención:
Desacopla una abstracción de su implementación de modo que ambos puedan cambiar independientemente.
Motivacion:
La herencia permite que una abstracción tenga varias implementaciones: esta relación se define en tiempo de compilación. Una clase abstracta define la interfaz a la abstracción y la aplicación de las subclases concretas en diferentes maneras. Sin embargo, no siempre es lo suficientemente flexible, obligando a una aplicación de herencia para la captación permanente, por lo que resulta difícil de modificar, ampliar, y la reutilización de abstracciones e implementaciones independiente.
Aplicabilidad:
Se utiliza el patrón cuandose desea evitar una permanente vinculacion entre una abstracción y su aplicación. Este podría ser el caso, por ejemplo, cuando la aplicación debe seleccionar o cambiar en tiempo de ejecución. Tanto las abstracciones y sus implementaciones deben ser extensibles por las subclases. En este caso, el patrón de Bridge permite combinar las diferentes abstracciones e implementaciones y ampliar de forma independiente-, de modo que los cambios en las clases abstractas existentes no deben influir en la aplicación , tal modo se comparte una implementación entre múltiples objetos, sin que lo noten los clientes.
Estructura:
La estructura de un Bridge se puede clasificar en dos partes: la parte abstracta y la implementacion de la interfaz por las diferentes clases del grupo de objetos, de modos que la relación se hace mediante una agregacion de la interfaz por partde de la clase abstracta, de esta forma se relaciona la primer parte y la segunda, donde sus comportamientos son independientes.
- Define la abstracción de la interfaz, manteniedo una referencia a un objeto que implementa la interfaz.
- Amplía la interfaz definida por la abstracción, de modo que captura las especificaciones o información necesaria proveniente del objeto que implementa la interfaz.
- Define la interfaz de la aplicación clases. Esta interfaz no tiene que corresponder exactamente a la interfaz de abstracción, de hecho las dos interfaces pueden ser muy diferentes. Normalmente la interfaz Implementor proporciona sólo operaciones primitivas, y define la abstracción de alto nivel sobre la base de estas operaciones primitivas.
- Implementa la interfaz concreta y define sus aplicació
- Utiliza los objetos proporcianados por sus gusto.
- La disocia la interfaz de la aplicación. Una aplicación no está vinculada permanente a una interfaz. Es incluso posible que un objeto pueda cambiar su aplicación en tiempo de ejecución. La Abstracción y la interfaz eliminan tiempo de compilación y dependencias de la aplicación, de modo que el cambio de una clase no requiere recompilar la clase de abstracción y de sus clientes. Esta propiedad es esencial cuando se debe garantizar la compatibilidad binaria entre diferentes versiones de una biblioteca de clases. Por otra parte, esta disociación alienta capas que pueden conducir a una mejor sistema estructurado.
- Mejora de la extensibilidad, de forma que se puede ampliar la Abstracción y ejecutor en jerarquías independientes.
- Oculta detalles de implementación a los clientes, protegiendo detalles de implementación, como el intercambio de objetos y el mecanismo de acompañamiento de referencias (en su caso).
package Logica;
public abstract class Panaderia {
public abstract TipoDePan getImplementador();
public abstract String nombrePan();
}
//*Ahora creamos una clase que hereda de Panaderia, en la cual se estructura el metodo de la clase abstracta y se crean nuevos metodos, los cuales trabajan con un objeto de la que implementa la interfaz*//
- Abstract Factory permite crear y configurar un Bridge particular (y esta factoría puede ser un Singleton).
- El patrón Adaptador tiene también el objetivo de hacer trabajar juntas clases con distinta interfaz, pero en general se aplica a sistemas que ya existen. El patrón Bridge suele aplicarse al empezar un diseño, para permitir que las abstracciones e implementaciones evolucionen independientemente.
DesIgn Patterns: Elements of Reusable Object-Oriented Software Gamma, Helm, Johnson, Vlissides Editorial Addison-Wesley.
Muy bueno tu blog,excelente el codigo de ejemplo.Me gustaria saber si me pueden enviar ese codigo en netbeans para probarlo..Gracias..saludos
ResponderEliminarHola disculpa tendras un ejemplo distinto a este pero que siga siendo del patron bridge o si tienes uno del patron singleton esta genial pero que tenga igual interfaz grafica con botones, etc.Te lo agradeceria mucho.
ResponderEliminar