¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Patrones de diseño en C#
  3. El patrón Bridge
Extrait - Patrones de diseño en C# Los 23 modelos de diseño: descripción y soluciones ilustradas en UML 2 y C# [2ªedición]
Extractos del libro
Patrones de diseño en C# Los 23 modelos de diseño: descripción y soluciones ilustradas en UML 2 y C# [2ªedición] Volver a la página de compra del libro

El patrón Bridge

Descripción

El objetivo del patrón Bridge es separar el aspecto de implementación de un objeto de su aspecto de representación y de interfaz.

De este modo, por un lado la implementación puede encapsularse por completo y por otro lado la implementación y la representación pueden evolucionar de manera independiente y sin que ninguna suponga restricción alguna sobre la otra.

Ejemplo

Para realizar la solicitud de matriculación de un vehículo de ocasión, conviene precisar sobre esta solicitud cierta información importante como el número de placa existente. El sistema muestra un formulario para solicitar esta información.

Existen dos implementaciones de los formularios:

  • formularios HTML;

  • formularios basados en un applet.

Por tanto es posible introducir una clase abstracta FormularioMatriculación y dos subclases concretas FormularioMatriculaciónHtml y FormularioMatriculaciónApplet.

En una primera etapa, las solicitudes de matriculación sólo afectan a España. A continuación, se hace necesario introducir una nueva subclase de FormularioMatriculación correspondiente a las solicitudes de matriculación de Portugal, subclase llamada FormularioMatriculaciónPortugal. Esta subclase debe a su vez ser abstracta y tener dos subclases concretas por cada implementación. La figura 3-3.1 muestra el diagrama de clases correspondiente.

images/figure44.PNG

Figura 3-3.1 - Jerarquía de formularios integrando las subclases de implementación

Este diagrama pone de manifiesto dos problemas:

  • La jerarquía mezcla al mismo nivel subclases de implementación y una subclase de representación: FormularioMatriculaciónPortugal. Además para cada representación es preciso introducir dos subclases de implementación, lo cual...

Estructura

1. Diagrama de clases

La figura 3-3.3 detalla la estructura genérica del patrón.

images/figure11-3.png

Figura 3-3.3 - Estructura del patrón Bridge

2. Participantes

Los participantes del patrón son los siguientes:

  • ClaseAbstracta (FormularioMatriculación) es la clase abstracta que representa los objetos de dominio. Mantiene la interfaz para los clientes y contiene una referencia hacia un objeto que responde a la interfaz Implementación.

  • ClaseConcreta (FormularioMatriculaciónEspaña y FormularioMatriculaciónPortugal) es la clase concreta que implementa los métodos de ClaseAbstracta.

  • Implementación (FormularioImpl) define la interfaz de las clases de implementación. Los métodos de esta interfaz no deben corresponder con los métodos de ClaseAbstracta. Ambos conjuntos de métodos son diferentes. La implementación incluye por lo general métodos de bajo nivel y los métodos de ClaseAbstracta son de alto nivel.

  • ImplementaciónA, ImplementaciónB (FormHtmlImpl, FormAppletImpl) son clases concretas que realizan los métodos incluidos en la interfaz Implementación.

3. Colaboraciones

Las operaciones de ClaseAbstracta y de sus subclases invocan a los métodos incluidos en la interfaz Implementación.

Dominios de aplicación

El patrón se utiliza en los siguientes casos:

  • Para evitar que exista un vínculo demasiado fuerte entre la representación de los objetos y su implementación, en especial cuando la implementación se selecciona en el curso de ejecución de la aplicación.

  • Para que los cambios en la implementación de los objetos no tengan impacto en las interacciones entre los objetos y sus clientes.

  • Para permitir a la representación de los objetos y a su implementación conservar su capacidad de extensión mediante la creación de nuevas subclases.

  • Para evitar obtener jerarquías de clases demasiado complejas como ilustra la figura 3-3.1.

Ejemplo en C#

A continuación presentamos un ejemplo escrito en C# basado en el diagrama de clases de la figura 3-3.2.

Comenzamos por la interfaz que describe la implementación de los formularios que contienen dos métodos, uno para visualizar un texto y otro para administrar una zona concreta.

using System; 
 
public interface FormularioImpl 
{ 
    void dibujaTexto(string texto); 
    string administraZonaIndicada(); 
} 

Mostramos a continuación la clase de implementación FormHtmlImpl que simula la visualización y la introducción manual mediante un formulario HTML. 

using System; 
 
public class FormHtmlImpl : FormularioImpl 
{ 
 
    public void dibujaTexto(string texto) 
    { 
        Console.WriteLine("HTML: " + texto); 
    } 
 
    public string administraZonaIndicada() 
    { 
        return Console.ReadLine(); 
    } 
} 

A continuación se detalla la clase de implementación FormAppletImpl que simula la visualización y la introducción manual mediante un formulario basado en un applet.

using System; 
 
public class FormAppletImpl : FormularioImpl 
{ 
 
    public void dibujaTexto(string texto) 
    { ...