Introducción:
Los patrones de diseño son la base para solucionar problemas
comunes en el desarrollo de software y otros ámbitos referentes al diseño de
interfaces.
Los patrones de diseño describen una estructura que resuelve
un problema particular dentro de un contexto específico. El patrón de diseño
debe ser reutilizable y debe servir como guía para desarrollar un patrón distinto
en estructura.
En este informe se describen los patrones de diseño Iterator
y Mediator, cada uno con sus funciones básicas y un ejemplo de su ocupación.
Iterator
Iterator provee un mecanismo de acceso secuencial a
elementos de una colección, definiendo una interface que declara métodos para
acceder secuencialmente a los objetos de la colección. Una clase accede a la colección
mediante dicha interface.
Su principal característica es que se busca acceder a los contenidos de los objetos sin necesidad de saber cuál es su estructura. Su idea es crear la forma de soportar el recorrido de objetos de diferentes formas mediante una interfaz uniforme.
Se utiliza cuando:
- Una clase necesita acceder al contenido de una
colección sin llegar a ser dependiente de la clase que es utilizada para
implementar la colección, es decir sin tener que exponer su representación
interna.
- Una clase necesita un modo uniforme de acceder
al contenido de varias colecciones.
- Cuando se necesita soportar múltiples recorridos
de una colección.
- El patrón debe ser utilizado cuando se requiera una forma estándar de recorrido de una colección, es decir, cuando no es necesario que el cliente sepa si está recorriendo un List, un Set, un Array, un Queue, etc.
- - El agregado (Aggregate) define una interfaz para crear un objeto Iterator.
- - Iterator define una interfaz para acceder y recorrer los elementos del Aggregate.
- - IteratorConcreto implementa la interfaz de Iterator y guarda la posición actual del recorrido en cada momento.
- - AggregateConcreto implementa la interfaz de creación de iteradores devolviendo una instancia del IteratorConcreto apropiado.
Ejemplo:
Sucursal de Empleados: Se implementa un Array sin que el
cliente tenga acceso a saber de ello.
Se crea el iterator para recorrer los elementos de la sucursal (los empleados). El método Iterator devuelve un objeto DivisionIterator.
Consecuencias
Es posible acceder a una colección de objetos
sin conocer el código de los objetos.
Utilizando varios objetos Iterator, es simple
tener y manejar varios recorridos al mismo tiempo.
Es posible para una clase Colecction
proporcionar diferentes tipos de objetos Iterator que recorran la colección en
diferentes modos. Por ejemplo, una clase Colecction que mantiene una asociación
entre la clave de los objetos y el valor de los objetos podría tener diferentes
métodos para crear Iterators que recorran sólo la clave de los objetos y crear
Iterators que recorran sólo el valor de los objetos.
Las clases Iterator simplifican el código de las
colecciones, ya que el código de los recorridos se encuentra en los Iterators y
no en las colecciones.
Mediator
Un mediator es un patrón de diseño que define un objeto como
procesador central. Permite la interacción entre varios objetos, coordinando
las relaciones entre los participantes.
Cuando muchos objetos interactúan entre sí, se forma una
estructura compleja con demasiadas conexiones. En un caso extremo cada objeto
puede conocer a todos los demás objetos. Para prevenir esto, Mediator encapsula
el comportamiento de todo un conjunto de objetos en uno solo.
Usar el patrón Mediator cuando:
- Un conjunto grande de objetos se comunica de una
forma bien definida, pero compleja.
- Reutilizar un objeto se hace difícil porque se
relaciona con muchos objetos.
- Las clases son difíciles de reutilizar porque su
función básica esta entrelazada con relaciones de dependencia.
- Se puede asociar el uso de un patrón Mediator a la torre de
control de un aeropuerto: la función de sincronizar las acciones de los aviones
(aterrizar/despegar).
- - Mediator define una interface para comunicarse con los objetos colegas (Colleague).
- - MediatorConcreto implementa la interface y define como los colegas interactúan entre ellos.
- - Colleague define el comportamiento que debe implementar cada colega para poder comunicarse el Mediator de manera estándar.
- - ColleagueConcreto: cada colega conoce a su Mediador, y lo ocupa para la comunicación entre Colegas.
Ejemplo:
Chat: Los usuarios se comunican en un salón de chat. Se define un interface que todos los usuarios de chat deben implementar para participar. La clase usuario representa a un user que quiera participar del chat.
Su funcionamiento:
Consecuencias
Desacopla a los colegas: el patrón Mediator
promueve bajar el acoplamiento entre colegas. Se puede variar y reusar colegas
y mediadores independiéntemente.
Simplifica la comunicación entre objetos: los
objetos que se comunican de la forma "muchos a muchos" puede ser
remplazada por una forma "uno a muchos" que es menos compleja y más elegante.
Además esta forma de comunicación es más fácil de entender. Es decir, un objeto
no necesita conocer a todos los objetos, tan sólo a un mediador.
Clarifica como los objetos se relacionan en un
sistema.
Centraliza el control: el mediador es el que se
encarga de comunicar a los colegas, este puede ser muy complejo, difícil de
entender y modificar.
Conclusión:
Los
patrones Iterator y Mediator cumplen funciones específicas muy requeridas en
los procesos de desarrollo de software, mientras uno permite el recorrido de
cualquier tipo de colección de objetos, indiferente de cual sea la estructura
de ellos, el otro permite un control de comunicación entre objetos. Ambos
patrones de diseño son una solución reutilizable para problemas frecuentes en
la utilización de objetos en desarrollo de programas.
“Una cosa que los diseñadores expertos no hacen es resolver cada problema desde el principio [...]. Cuando encuentran una buena solución la usan una y otra vez. Esta experiencia es lo que los hace expertos” (Gamma, 1995)
“Una cosa que los diseñadores expertos no hacen es resolver cada problema desde el principio [...]. Cuando encuentran una buena solución la usan una y otra vez. Esta experiencia es lo que los hace expertos” (Gamma, 1995)
Fuentes:
ResponderEliminarhttp://migranitodejava.blogspot.com.es/
Wikipedia
como puso el metodo main
ResponderEliminar