Informática

Patrones de diseño en Java: Patrón Observer

28 agosto, 2013

Con este, doy comienzo a una serie de artículos sobre distintos patrones de diseño y su implementación en lenguaje Java. El objetivo no es formar al programador experto, sino facilitar la comprensión de los patrones a todo aquel que se inicie en el mundo de la programación.

En este caso, comenzaremos con el patrón Observer que, por ejemplo, está presente en la JDK de Java en los denominados Listeners y Adapters que son utilizados para atender a las acciones realizadas por un usuario sobre un componente de la interfaz gráfica.

Patrón Observer.

El patrón Observer nos permite implementar una estrategia que reaccione a los cambios de estado en  el objeto observado.

Debemos identificar los siguientes actores en la implementación del patrón:

  • Objetos observables: Estos objetos deberán implementar un mecanismo para poder añadir y eliminar objetos observadores. Estableceremos las condiciones que deben cumplir a través de una interfaz IObservable. Además de los método que se ven a continuación, la interfaz, podría declarar un método “void notificar();” que se encargaría, en su implementación, de avisar a todos los observadores del cambio de estado.

 

 

 

 

 

 

  • Objetos observadores: serán aquellos objetos que implementen la interfaz IObserver donde vendrá definido, al menos, un método que defina la reacción correspondiente al cambio de estado.

 

 

 

 

 

Con estos contratos, nos aseguramos que los elementos observadores y a observar cumplen los requisitos y pueden ser tratados de una forma genérica que nos permita cierto grado de reutilización.

Ejemplo práctico.

Resumen gráfico de la implementación a través de un diagrama UML:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A continuación se lleva a cabo la implementación de dicho patrón definiendo una clase Tiempo (horas, minutos y segundos), que tendrá codificados los métodos de la interfaz IObservable para añadir y eliminar observadores:

 

 

 

 

 

 

 

 

 

 

Incorporará también un método privado para notificar a los distintos observadores de los cambios en el estado, la sobreescritura del método toString() para convertir un objeto tiempo a cadena y un método que inicie la ejecución del hilo con el bucle infinito.

 

 

 

 

 

 

 

 

 

 

Dicho hilo utilizará la implementación de la interfaz Runnable que se encargará, cada segundo, de notificar el cambio del estado a los IObserver.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Finalmente, codificaremos los Observadores, uno para mostrar la hora cada segundo por consola:

 

 

 

 

 

 

 

 

 

 

 

 

Y otro para hacerlo a través de un JLabel en una ventana de la aplicación:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Finalmente, desarrollamos el método main que lanzará el ejemplo y mostrará como los observadores son notificados cada segundo de los cambios de estado en el objeto Tiempo observado:

 

 

 

 

 

 

 

 

 

El código fuente de este ejemplo está disponible para descarga aquí.

En el próximo articulo veremos el patrón Composite.

Post publicado por: Juan José Hernández

Puedes compartir este artículo en:
    Deja un comentario

    Información básica acerca de cómo protegemos tus datos conforme al Reglamento General de Protección de Datos (Reglamento UE 2016/679) y en la Ley Orgánica 3/2018, de 5 de diciembre, de Protección de Datos Personales y garantía de los derechos digitales

    De conformidad con lo establecido en el Reglamento General de Protección de Datos, te informamos de:

    - Quien es el responsable del tratamiento: SEAS, Estudios Superiores Abiertos S.A.U con NIF A-50973098, dirección en C/ Violeta Parra nº 9 – 50015 Zaragoza y teléfono 976.700.660.

    - Cuál es el fin del tratamiento: Gestión y control de los comentarios del blog de SEAS. 

    - En que basamos la legitimación: En tu consentimiento.

    - La comunicación de los datos: No se comunicarán tus datos a terceros.

    - Los criterios de conservación de los datos: Se conservarán mientras exista interés mutuo para mantener el fin del tratamiento o por obligación legal. Cuando dejen de ser necesarios, procederemos a su destrucción.

    - Los derechos que te asisten: (i) Derecho de acceso, rectificación, portabilidad y supresión de sus datos y a la limitación u oposición al tratamiento, (ii) derecho a retirar el consentimiento en cualquier momento y (iii) derecho a presentar una reclamación ante la autoridad de control (AEPD).

    - Los datos de contacto para ejercer tus derechos: SEAS, Estudios Superiores Abiertos S.A.U. C/ Violeta Parra nº 9 –
    50015 Zaragoza (España) o través de correo electrónico a lopd@estudiosabiertos.com

    - También puedes ponerte en contacto con nuestro Delegado de Protección de Datos en dpd@estudiosabiertos.com

    Información adicional: Puedes consultar la información adicional y detallada sobre nuestra política de privacidad