240 likes | 474 Views
PATRONES DE DISEÑO. Observador (observer) Visita (Visitor) Singleton. SINGLETON. El patrón de diseño Singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.
E N D
PATRONES DE DISEÑO Observador (observer) Visita (Visitor) Singleton
El patrón de diseño Singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto. Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.
El patrón Singleton se implementa creando en nuestra clase un método que crea una instancia del objeto sólo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con atributos como protegido o privado).
La instrumentación del patrón puede ser delicada en programas con múltiples hilos de ejecución. Si dos hilos de ejecución intentan crear la instancia al mismo tiempo y esta no existe todavía, sólo uno de ellos debe lograr crear el objeto. La solución clásica para este problema es utilizar exclusión mutua en el método de creación de la clase que implementa el patrón.
Las situaciones más habituales de aplicación de este patrón son aquellas en las que dicha clase controla el acceso a un recurso físico único (como puede ser el ratón o un archivo abierto en modo exclusivo) o cuando cierto tipo de datos debe estar disponible para todos los demás objetos de la aplicación.
El patrón Singleton provee una única instancia global gracias a que: • La propia clase es responsable de crear la única instancia. • Permite el acceso global a dicha instancia mediante un método de clase. • Declara el constructor de clase como privado para que no sea instanciable directamente.
Propósito • Representa una operación a realizar sobre los elementos de una estructura de objetos. • Permite definir una nueva operación sin cambiar las clases de elementos sobre las que opera.
Aplicabilidad Usa el patrón Visitor cuando: • Una estructura de objetos contiene muchas clases de objetos con interfaces distintas, y se quiere realizar sobre ellos operaciones que son distintas en cada clase concreta. • Se quieren realizar muchas operaciones distintas sobre los objetos de una estructura, sin incluir dichas operaciones en las clases. • Las clases que forman la estructura de objetos no cambian, pero las operaciones sobre ellas sí.
Participantes • Visitor (NodeVisitor): define una operación de visita para cada clase de elemento concreto en la estructura de objetos. • ConcreteVisitor (TypeCheckingVisitor): • Implementa la interfaz Visitor. • Cada operación implementa un fragmento de la labor global del visitor concreto, pudiendo almacenar información local. • Element (Node): define una operación accept con un visitor como argumento.
Participantes • ConcreteElement (AssignmentNode): • implementa la operación accept. • ObjectStructure (Compiler): • Gestiona la estructura de objetos, y puede enumerar sus elementos. • Puede ser un compuesto (patrón composite) o una colección de objetos. • Puede ofrecer una interfaz que permita al visitor visitar a sus elementos.
Consecuencias • Facilita la definición de nuevas operaciones • Agrupa operaciones relacionadas • Añadir nuevas clases ConcreteElement es costoso • Utilizar el patrón visitor si la jerarquía de clases es estable • Permite atravesar jerarquías de objetos que no están relacionados por un padre común • El visitor puede acumular el estado de una operación al visitar la estructura de objetos, en vez de pasarlo como argumento o usar variables globales. • Rompe la encapsulación
El patrón Observador también conocido como "spider" define una dependencia del tipo uno-a-muchos entre objetos, de manera que cuando uno de los objetos cambia su estado, el observador se encarga de notificar este cambio a todos los otros dependientes.
Participantes • Subject: Conoce a sus observadores, que pueden ser de 0 a N, y ofrece la posibilidad de añadir y eliminar observadores. • Observer :Define la interfaz que sirve para notificar a los observadores los cambios realizados en el Subject. • ConcreteSubject: Almacena el estado que es objeto de interés de los observadores y envía un mensaje a sus observadores cuando su estado cambia. • ConcreteObserver: Mantiene una referencia a un ConcreteSubject: • Almacena el estado del Subject que le resulta de interés • Implementa la interfaz de actualización de Observer para mantener la consistencia entre los dos estados.
Este patrón también se conoce como el patrón de publicación-inscripción o modelo-patrón. Estos nombres sugieren las ideas básicas del patrón, que son bien sencillas: el objeto de datos contiene atributos mediante los cuales cualquier objeto observador o vista se puede suscribir a él pasándole una referencia a sí mismo. El Sujeto mantiene así una lista de las referencias a sus observadores.
Los observadores a su vez están obligados a implementar unos métodos determinados mediante los cuales el Sujeto es capaz de notificar a sus observadores "suscritos" los cambios que sufre para que todos ellos tengan la oportunidad de actualizar el contenido representado. De manera que cuando se produce un cambio en el Sujeto, ejecutado, por ejemplo, por alguno de los observadores, el objeto de datos puede recorrer la lista de observadores avisando a cada uno.
Aplicación • Cuando una abstracción tiene dos aspectos, uno dependiente del otro. La encapsulación de estos aspectos en objetos separados permite modificarlos y reutilizarlos de forma independiente. • Cuando un cambio en un objeto exige cambios en otros, pero se desconoce a cuántos objetos afectan dichos cambios. • Cuando un objeto tiene que ser capaz de notificar a otros objetos sin saber nada más de esos objetos.
Bibliografías • http://es.wikipedia.org/wiki/Observer_(patr%C3%B3n_de_dise%C3%B1o) • peterpan.uc3m.es/docencia/p_s_ciclo/tdp/curso0203/apuntes/observer.pdf • http://es.wikipedia.org/wiki/Singleton • http://www.dei.inf.uc3m.es/espanyol/miembros/eguerra/docencia/0708/10%20Visitor.pdf