Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Look up keyword
Like this
1Activity
0 of .
Results for:
No results containing your search query
P. 1
Bridge

Bridge

Ratings: (0)|Views: 4|Likes:

More info:

Published by: Luis Agustin Suaña Jala on Nov 17, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

11/14/2013

pdf

text

original

 
Bridge (patrón de diseño)
 
Bridge
, también conocido como Handle/Body, es una técnica usada enprogramación para desacoplar una abstracción de su implementación, de manera que ambaspuedan ser modificadas independientemente sin necesidad de alterar por ello la otra.Esto es, se desacopla una abstracción de su implementación para que puedan variarindependientemente.
Contenido
 
 
 
 
 
 
 
[editar] Aplicabilidad
Se usa el patrón
 Bridge
cuando:
 
Se desea evitar un enlace permanente entre la abstracción y su implementación.Esto puede ser debido a que la implementación debe ser seleccionada o cambiada entiempo de ejecución.
 
Tanto las abstracciones como sus implementaciones deben ser extensibles pormedio de subclases. En este caso, el patrón
 Bridge
permite combinar abstracciones eimplementaciones diferentes y extenderlas independientemente.
 
Cambios en la implementación de una abstracción no deben impactar en losclientes, es decir, su código no debe tener que ser recompilado.
 
(En C++) Se desea esconder la implementación de una abstracción completamente alos clientes. En C++, la representación de una clase es visible en la interface de laclase.
 
Se desea compartir una implementación entre múltiples objetos (quizá usandocontadores), y este hecho debe ser escondido a los clientes.
[editar] Estructura
 
[editar] Participantes
 
Abstraction
define una interface abstracta. Mantiene una referencia a un objeto detipo
 Implementor 
.
 
RefinedAbstraction
extiende la interface definida por
 Abstraction
 
 
Implementor
define la interface para la implementación de clases. Esta interface nose tiene que corresponder exactamente con la interface de
 Abstraction
; de hecho, lasdos interfaces pueden ser bastante diferente. Típicamente la interface
 Implementor 
 provee sólo operaciones primitivas, y
 Abstraction
define operaciones de alto nivelbasadas en estas primitivas.
 
ConcreteImplementor
implementa la interface de
 Implementor 
y define suimplementación concreta.
[editar] Colaboraciones
 
 Abstraction
emite los pedidos de los clientes a su objeto
 Implementor 
.
[editar] Consecuencias
 
1.
 Desacopla interface e implementación
: una implementación no es limitadapermanentemente a una interface. La implementación de una abstracción puede serconfigurada en tiempo de ejecución. Además le es posible a un objeto cambiar suimplementación en tiempo de ejecución. Desacoplando
 Abstraction
e
 Implementor 
 también elimina las dependencias sobre la implementación en tiempo decompilación. Cambiar una clase de implementación no require recompilar la clase
 Abstraction
ni sus clientes. Esta propiedad es esencial cuando te debes asegurar lacompatibilidad binaria entre diferentes versiones de una biblioteca de clases. Esmás, este desacoplamiento fomenta las capas, que pueden conducir a un sistema
 
mejor estructurado. La parte de alto nivel de un sistema sólo tiene que conocer
 Abstraction
e
 Implementor 
.
 
2.
 Mejora la extensibilidad 
: se puede extender las jerarquías de
 Abstraction
e
 Implementor 
independientemente.
 
3.
 Esconde los detalles de la implementación a los clientes
.
[editar] Implementación
Consideremos las siguientes cuestiones de implementación cuando se aplica este patrón:
 
1.
Sólo un Implementor 
: en situaciones donde existe sólo una implementación, crearuna clase
 Implementor 
abstracta no es necesario. Esto es un caso especial delpatrón; hay una relación uno-a-uno entre
 Abstraction
e
 Implementor 
. Sin embargo,esta separación es aún muy útil cuando un cambio en la implementación de unaclase no debe afectar a sus clientes existente, es decir, ellos no deben serrecompilados, sólo relinkeados. En C++, la interface de la clase
 Implementor 
puedeser definida en un archivo header privado el cual no es proveído a los clientes. Estopermite esconder una implementación de una clase completamente de sus clientes.
 
2
Creando el objeto Implementor adecuado
: ¿Cómo, cuándo y dónde que claseImplementor instanciar cuando hay más de una?Si Abstraction conoce todas lasclases ConcreteImplementor puede instanciar una de ellas en su constructor; puededecidir cuál instanciar dependiendo de los parámetros del constructor.Otra aproximación es elegir una implementación inicial por defecto y cambiarla despuésacorde al uso. También es posible delegar la decisión a otro objeto en conjunto.
 
3
Compartiendo implementadores
: el estilo Handle/Body en C++ puede ser usadopara compartir implementaciones de muchos objetos. Body almacena una cuenta dereferencia que la clase Handle incrementa y decrementa.
 
4
Usando herencia múltiple
. Se puede usar herencia múltiple en C++ para asociaruna interfaz con su implementación.Creamos una clase Abstracción padre que sea abstracta, además de abstracciones concretasmediante clases que heredan de ella. Por otro lado se tienen las clases que implementan lafuncionalidad con una estructura similar: una clase ImplementaciónAbstracta padre, y todaslas clases hijas necesarias que implementan la funcionalidad de todas las manerasnecesarias. La relación se da entre la clase abstracta Abstracción y la clase abstracta Implementación, delegando la primera la implementación en la segunda, que a su vez ladelega en las implementaciones concretas.
[editar] Código en java
/** interfaz que implementan los implementadores especificos **/public interface Implementador {public abstract void operacion();}

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->