BRIDGE
BRIDGE
BRIDGE
Nombre
Bridge.
También Conocido
Handle / Body
Clasificación
Estructural.
Intención
Desacopla la abstracción de su implementación permitiendo que las dos
varíen independientemente.
Motivo
Cuando una abstracción puede tener varias im-plementaciones posibles
el camino habitual para acomodarlas es usar herencia. Una clase
abstracta define la interfaz y clases concretas la implementa de
diferentes formas. El problema es que esta solución no es lo
suficientemente flexible. La herencia ata una implementación a la
abstracción permanentemente, lo que hace la hace difícil de modificar,
extender y rehusar la implementación y la abstracción
independientemente. La respuesta a esta flexibilidad esta en utilizar el
patrón de diseño bridge.
Aplicabilidad
Bridge debe ser usado cuando:
Estructura
Participantes
Abstraction: Define la interfaz de la abstracción. Mantiene una
referencia a un objeto del tipo implementor.
RefinedAbstraction: Extiende la interfaz definida por Abstraction.
Implementor: Define una interfaz para la implementación de
clases; ésta interfaz no tiene una correspondencia directa a la
interfaz de la abstracción, de hecho pueden ser muy diferentes.
Por lo general implementor define operaciones primitivas,
mientras que abstraction define operaciones de más alto nivel
basadas en las de implementor.
ConcrteImplementor: implementa la interfaz implementor
definiendo una implementación concreta.
Colaboración
Abstraction envía las peticiones del cliente a su objeto implementor.
Consecuencias
Las siguientes son consecuencias del uso del patrón Bridge:
Implementación
Se deben considerar las siguientes situaciones cuando se aplica el patrón bridge:
El código ejemplo se basa en la abstracción de una operación sencilla, de dos números, las
implementaciones son sumar, multiplicar y dividir.
return a+b;
return a*b;
return a/b;
import operacion.Implementor;
Implementor implementacion=null;
this.implementacion=imp;
return implementacion.operacion(num1,num2);
import operacion.Implementor;
import operacion.Abstraction;
int num1=4;
int num2=2;
System.out.println(abst[i].operar(num1, num2));
Usos conocidos
En ET++, se usa para la abstracción del tipo de ventana.
Patrones relacionados
Abstract factory puede crear y configurar un, bridge en particular.
Adapter tiene una estructura similar pero su intención es diferente. El patrón bridge
separa la abstracción de la implementación de un componente, permitiendo que sean
modificados independientemente, mientras adapter reutiliza un componente ya
existente que no es compatible.
Referencias bibliográficas
[1] Erich Gamma et al, Elements of reusable object-oriented software.
[2] Steve Holzner, Design patterns for dummies, Wiley Publishing Inc, Indianapolis, EEUU, 2006, 339.
[3] Jesús García Molina, Análisis y diseño de software - Patrones de diseño, dis.um.es/~jmolina/astema3.