lunes, 8 de julio de 2013

Observador (Observer )




Observador (Observer )

Este patrón crea una relación entre objetos en la que uno de ellos es observado por el resto, de manera que cuando el objeto observado cambia el resto puede automáticamente realiza alguna acción.

El patrón Observador lo utiliza Java para implementar el código que se ejecuta cuando un objeto de tipo componente cambia de estado. Java crea un objeto de clase Listener (escuchador en vez de observador) para cada operación que se

realiza con un botón (elemento observado en este caso). Ese objeto Listener contiene el código que se ejecuta al realizar la operación sobre el botón. Así, cuando un usuario pulsa un botón y el estado del componente botón cambia el Listenerque lo observa es capaz de ejecutar cierto código.

Comando (Command)





Comando (Command)

Este patrón encapsula las operaciones que realiza un objeto de forma que éstas sean a su vez objetos que cumplen una misma interfaz. Esto permite realizar, de manera sencilla, tareas como: agrupar o encolar operaciones, deshacer operaciones y parametrizar otros objetos con dichas operaciones de forma sencilla. Además, fomenta que añadir nuevos comandos sea una tarea simple y aislada.

El patrón Comando se podría utilizar, por ejemplo, para ordenar los comandos que se pueden ejecutar desde un intérprete de consola. Si el intérprete utiliza los comandos solo a través de la interfaz común, sin conocer en cada momento el comando concreto que se está ejecutando, una de las ventajas que se obtienen consiste en que el número de comandos puede crecer sin modificar dicho interprete.

Estrategia (Strategy )




Estrategia (Strategy )

En cualquier programa es habitual disponer de un conjunto de algoritmos que comparten alguna propiedad, como que pueden ejecutarse indistintamente sobre unos datos de entrada o que sean de determinado tipo. Ejemplos de tales familias serían las funciones matemáticas (seno, coseno, raíz...) o los filtros gráficos de un programa de dibujo. El patrón Estrategia permite organizar dichas familias de algoritmos, de manera que compartan una interfaz para que luego los clientes de dichas clases puedan utilizarlos indistintamente.

Un ejemplo de uso del patrón Estrategia puede ser la implementación de los diferentes algoritmos de ordenación de una lista de números.

Gracias al patrón Estrategia el usuario del contexto puede modificar su criterio de ordenación de forma dinámica.

Iterador (Iterator )


Iterador (Iterator )

Habitualmente, cuando se dispone de una colección de objetos se desea recorrerlos. El patrón Iterador permite definir objetos para realizar esta tarea. Un objeto iterador es una especie de apuntador que se puede iniciar apuntando al primer elemento de una colección y que puede desplazarse hasta el último elemento de la misma.

Java dispone de la interfaz Iterator, la cual está implementado por las diferentes clases de Collection. En realidad, estas clases son fábricas de iteradores que permiten recorrerlas.

Composición (Composite )




Composición (Composite )

Es muy común la necesidad de crear grafos dirigidos en los que cada nodo puede representar ciertos elementos de un modelo informático. Estos grafos suelen crearse utilizando el patrón Composición. Este patrón se puede definir como jerarquías de objetos que comparten una interfaz y tales que algunos de los objetos pueden formar parte de otros. Los objetos de la clase Elemento como los de Compuesto cumplen la interfaz Componente, pero los de clase Compuesto además puede contener dentro otros objetos de la clase Componente.
Por ejemplo, en una jerarquía de componentes de dibujo puede ser importante que todos los elementos que se puedan dibujar compartan cierta interfaz, pero además también es importante que unos elementos puedan formar parte de otros(los objetos línea forman parte del objeto cuadrado).




Decorador (Decorator )

Decorador (Decorator )

El patrón Decorador permite añadir nueva funcionalidad a una familia de componentes manteniendo la interfaz del componente.I mplementa un comportamiento determinado. La clase Decorador contiene un Componente en su interior. Cuando se solicita una operación al objeto de la clase Decorador esta la deriva al Componente que contiene. Las clases derivadas de Decorador son los verdaderos Decoradores que implementan una nueva funcionalidad añadida al Componente quecontienen.
-Por ejemplo, el patrón Decorador se puede utilizar, para añadir cifrado o compresión a las clases de escritura en Streams.

Así, la clase de la que derivan todas sería Writer. Un Writer concreto, por ejemplo, es el FileWriter. La misión de WriterDecorator es la de redirigir las llamadas a los diferentes métodos de la interfaz Writer hacia el Writer concreto que contiene (FileWriter, PrinterWriter...). Finalmente, las clases EncriptWriter y ZipWriter implementan cierta operación sobre el flujo de salida que se dirige hacia el Writer concreto contenido en el Decorador.

(Adapter o Wrapper )


Adaptador o Envoltorio (Adapter o Wrapper )

El patrón Envoltorio se utiliza cuando se desea que una clase utilice otra aunque ésta no cumple cierta interfaz obligatoria.
Este patrón se utiliza cuando deseamos almacenar un tipo primitivo de Java en un derivado de Collection. Por ejemplo, supongamos que deseamos almacenar un int en un Vector. Como los enteros no son elementos de la clase Object es necesario envolverlos en otra clase que contenga el entero y que, al derivar de Object, sí pueda ser insertada en el vector.

Por eso, y por otras razones, en Java existen clases como Integer, Float, Boolean o Character que son envoltorios delos tipos primitivos.