PATRONES DE DISEÑO

23
PATRONES DE DISEÑO PATRONES DE DISEÑO Observador (observer) Observador (observer) Visita (Visitor) Visita (Visitor) Singleton Singleton

description

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. - PowerPoint PPT Presentation

Transcript of PATRONES DE DISEÑO

Page 1: PATRONES DE DISEÑO

PATRONES DE DISEÑOPATRONES DE DISEÑO

Observador (observer)Observador (observer)Visita (Visitor)Visita (Visitor)SingletonSingleton

Page 2: PATRONES DE DISEÑO

SINGLETONSINGLETON

Page 3: PATRONES DE DISEÑO

El patrón de diseño Singleton (instancia única) El patrón de diseño Singleton (instancia única) está diseñado para restringir la creación de está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.un tipo a un único objeto.

Su intención consiste en garantizar que una Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.punto de acceso global a ella.

Page 4: PATRONES DE DISEÑO

El patrón Singleton se implementa El patrón Singleton se implementa creando en nuestra clase un método que creando en nuestra clase un método que crea una instancia del objeto sólo si crea una instancia del objeto sólo si todavía no existe alguna. Para asegurar todavía no existe alguna. Para asegurar que la clase no puede ser instanciada que la clase no puede ser instanciada nuevamente se regula el alcance del nuevamente se regula el alcance del constructor (con atributos como protegido constructor (con atributos como protegido o privado).o privado).

Page 5: PATRONES DE DISEÑO

La instrumentación del patrón puede ser La instrumentación del patrón puede ser delicada en programas con múltiples hilos delicada en programas con múltiples hilos de ejecución. Si dos hilos de ejecución de ejecución. Si dos hilos de ejecución intentan crear la instancia al mismo tiempo intentan crear la instancia al mismo tiempo y esta no existe todavía, sólo uno de ellos y esta no existe todavía, sólo uno de ellos debe lograr crear el objeto. La solución debe lograr crear el objeto. La solución clásica para este problema es utilizar clásica para este problema es utilizar exclusión mutua en el método de creación exclusión mutua en el método de creación de la clase que implementa el patrón.de la clase que implementa el patrón.

Page 6: PATRONES DE DISEÑO

Las situaciones más habituales de Las situaciones más habituales de aplicación de este patrón son aquellas en aplicación de este patrón son aquellas en las que dicha clase controla el acceso a las que dicha clase controla el acceso a un recurso físico único (como puede ser el un recurso físico único (como puede ser el ratón o un archivo abierto en modo ratón o un archivo abierto en modo exclusivo) o cuando cierto tipo de datos exclusivo) o cuando cierto tipo de datos debe estar disponible para todos los debe estar disponible para todos los demás objetos de la aplicación.demás objetos de la aplicación.

Page 7: PATRONES DE DISEÑO

El patrón Singleton provee una única El patrón Singleton provee una única instancia global gracias a que:instancia global gracias a que:

La propia clase es responsable de crear la La propia clase es responsable de crear la única instancia. única instancia.

Permite el acceso global a dicha instancia Permite el acceso global a dicha instancia mediante un método de clase. mediante un método de clase.

Declara el constructor de clase como Declara el constructor de clase como privado para que no sea instanciable privado para que no sea instanciable directamente. directamente.

Page 8: PATRONES DE DISEÑO

VISITORVISITOR

Page 9: PATRONES DE DISEÑO

PropósitoPropósito

Representa una operación a realizar sobre Representa una operación a realizar sobre los elementos de una estructura de los elementos de una estructura de objetos.objetos.

Permite definir una nueva operación sin Permite definir una nueva operación sin cambiar las clases de elementos sobre las cambiar las clases de elementos sobre las que opera.que opera.

Page 10: PATRONES DE DISEÑO

AplicabilidadAplicabilidad

Usa el patrón Usa el patrón Visitor Visitor cuando:cuando:

Una estructura de objetos contiene muchas clases de Una estructura de objetos contiene muchas clases de objetos con interfaces distintas, y se quiere realizar objetos con interfaces distintas, y se quiere realizar sobre ellos operaciones que son distintas en cada clase sobre ellos operaciones que son distintas en cada clase concreta.concreta.

Se quieren realizar muchas operaciones distintas sobre Se quieren realizar muchas operaciones distintas sobre los objetos de una estructura, sin incluir dichas los objetos de una estructura, sin incluir dichas operaciones en las clases.operaciones en las clases.

Las clases que forman la estructura de objetos no Las clases que forman la estructura de objetos no cambian, pero las operaciones sobre ellas sí.cambian, pero las operaciones sobre ellas sí.

Page 11: PATRONES DE DISEÑO

EstructuraEstructura

Page 12: PATRONES DE DISEÑO

ParticipantesParticipantes

Visitor Visitor (NodeVisitor): define una operación de (NodeVisitor): define una operación de visita para cada clase de elemento concreto en visita para cada clase de elemento concreto en la estructura de objetos.la estructura de objetos.

ConcreteVisitor ConcreteVisitor (TypeCheckingVisitor):(TypeCheckingVisitor):– Implementa la interfaz Implementa la interfaz Visitor.Visitor.– Cada operación implementa un fragmento de la labor Cada operación implementa un fragmento de la labor

global del global del visitor visitor concreto, pudiendo almacenar concreto, pudiendo almacenar información local.información local.

Element Element (Node)(Node): : define una operación define una operación accept accept con un con un visitor visitor como argumento.como argumento.

Page 13: PATRONES DE DISEÑO

ParticipantesParticipantes

ConcreteElement ConcreteElement (AssignmentNode)(AssignmentNode)::– implementa la operación implementa la operación accept.accept.

ObjectStructure ObjectStructure (Compiler):(Compiler):– Gestiona la estructura de objetos, y puede enumerar Gestiona la estructura de objetos, y puede enumerar

sus elementos.sus elementos.– Puede ser un compuesto (patrón Puede ser un compuesto (patrón compositecomposite) o una ) o una

colección de objetos.colección de objetos.– Puede ofrecer una interfaz que permita al Puede ofrecer una interfaz que permita al visitor visitor

visitar a sus elementos.visitar a sus elementos.

Page 14: PATRONES DE DISEÑO

ColaboracionesColaboraciones

Page 15: PATRONES DE DISEÑO

ConsecuenciasConsecuenciasFacilita la definición de nuevas operacionesFacilita la definición de nuevas operaciones

Agrupa operaciones relacionadasAgrupa operaciones relacionadas

Añadir nuevas clases Añadir nuevas clases ConcreteElement ConcreteElement es costosoes costoso– Utilizar el patrón Utilizar el patrón visitor visitor si la jerarquía de clases es establesi la jerarquía de clases es estable

Permite atravesar jerarquías de objetos que no están Permite atravesar jerarquías de objetos que no están relacionados por un padre comúnrelacionados por un padre común

El visitor puede acumular el estado de una operación al visitar El visitor puede acumular el estado de una operación al visitar la estructura de objetos, en vez de pasarlo como argumento o la estructura de objetos, en vez de pasarlo como argumento o usar variables globales.usar variables globales.

Rompe la encapsulaciónRompe la encapsulación

Page 16: PATRONES DE DISEÑO

OBSERVEROBSERVER

Page 17: PATRONES DE DISEÑO

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.

Page 18: PATRONES DE DISEÑO

ParticipantesParticipantesSubject: 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.

Page 19: PATRONES DE DISEÑO

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.

Page 20: PATRONES DE DISEÑO

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.

Page 21: PATRONES DE DISEÑO

AplicaciónAplicació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.

Page 22: PATRONES DE DISEÑO

Ejemplo Ejemplo

Page 23: PATRONES DE DISEÑO

BibliografíasBibliografí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