Patrones



Comments



Description

Patrones de Diseño¿Qué es un patrón de diseño? Es una solución bien documentada que los expertos aplican para solucionar nuevos problemas porque han sido utilizadas con éxito en el pasado Los expertos identifican partes de un problema que son similares a otros problemas que han encontrado anteriormente Recuerdan la solución aplicada y la generalizan Adaptan la solución general al contexto del problema actual ¿Qué es un patrón de diseño? Son una forma estandarizada para representar soluciones generales de problemas que se encuentran comúnmente en el desarrollo de software orientado a objetos Beneficios Catálogos de patrones Están documentados los pros y los contras de cada patrón. Se conocen las implicaciones de su aplicación Proporcionan un vocabulario común entre desarrolladores Abstracción y Reutilización Los patrones suponen una evolución en la abstracción y reutilización en la programación Abstracción Resolución de problemas complejos dividiéndolos en otros más simples Capacidad de ocultar detalles superfluos y centrarse en lo relevante para reducir la complejidad . clases. …) .Abstracción y Reutilización Reutilización Posibilidad de usar de nuevo código ya desarrollado anteriormente Formas de reutilización Copiar y Pegar !!PELIGRO¡¡ Reutilización de algoritmos (búsquedas. ordenaciones. …) Reutilización de funciones (métodos) Reutilización de librerías o APIs (métodos. Abstracción y Reutilización Abstracción y Reutilización en Programación Orientada a Objetos Abstracción funcional y de datos La encapsulación implica mejor reutilización La herencia permite formas de reutilización antes no posibles Es posible desarrollar algoritmos de forma genérica y especializarlos creando clases hijas y redefiniendo o implementando ciertos métodos . Polimorfismo. Clase abstracta) API (Librería) Componente Patrón de Diseño ¿Se puede aplicar de nuevo? Muy Pobre Buena Buena Buena Buena Buena ¿Qué se abstrae? Nada Tipos de datos Método Operación para tipo Fórmula Datos + Métodos Generacidad Muy pobre Moderada-Buena Moderada-Buena Buena Buena Buena Buena Buena Excelente Clases útiles Grupo de Clases Solución a un problema Buena-Muy Buena Buena-Muy Buena Muy Buena .Abstracción y Reutilización Tipo de Reutilización Fragmento de código Estructura de datos Funcional Tipos Genéricos Algoritmo Clases (Interfaz. Tipos de Patrones Existen cuatro grandes tipos de patrones de diseño Patrones de Creación Patrones de Comportamiento Patrones Estructurales Patrones de sistema . Tipos de Patrones Patrones de Creación Facilitan y simplifican la creación de objetos Permiten crear objetos sin definir la clase concreta. sólo la interfaz que debe implementar Permiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia Patrones de Comportamiento Guían el flujo de control del sistema (para facilitar la eficiencia y facilitar el mantenimiento) . la introducción de simplificaciones que mejoren la independencia entre partes.Tipos de Patrones Patrones Estructurales Describen formas efectivas de partir y combinar los elementos de una aplicación Permiten la comunicación de sistemas incompatibles.… Patrones de sistema Se aplican a la arquitectura de la aplicación Patrones más generales que los otros tipos . Arquitectónico (Coordina sistemas y subsistemas) Propósito . Componente (Grupo de clases).¿Para qué sirve? Presentación – Problema que soluciona (con ejemplos) Aplicabilidad – Cuando y por qué debería usarse . Estructural o De sistema Nivel .¿Cómo es un patrón? Los patrones están especificados siguiendo un formulario o formato estándar: Nombre También conocido como – Otros nombres usuales Propiedades Tipo .Creación. Comportamiento.Clase única. ¿Cómo es un patrón? … Descripción – Que hace y como se comporta de forma detallada Implementación .¿Cómo implementarlo? Ventajas e Inconvenientes Variantes Patrones Relacionados Ejemplo . sólo el interfaz que debe implementar Permiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia .Patrones de Creación Facilitan y simplifican la creación de objetos Permiten crear objetos sin definir la clase concreta. Patrones de Creación Singleton (Único) Restringe la creación de un único objeto de una clase en todo el sistema y permite acceder a él Factory Method (Método Factoría) Define un método para la creación de objetos además del constructor Builder (Constructor) Simplifica la construcción de objetos complejos definiendo una clase cuya responsabilidad es crear objetos de otras clases . solo el interfaz Prototype (Prototipo) Define clases cuyos objetos pueden clonarse Hay muchos mas… .Patrones de Creación Abstract Factory (Fábrica Abstracta) Permite crear objetos de un conjunto de clases relacionadas pero sin especificar la clase concreta. Nivel: Objeto Propósito Permite tener una única instancia de esta clase en el sistema.Patrones de Creación Singleton (Único) Propiedades Tipo: Creación. y permite que todas las clases tengan acceso a esa instancia . Desde todas las clases se necesita usar el mismo objeto HistoryList Se podría crear un único objeto y pasar ese objeto como parámetro a todos los demás objetos. Sólo con documentación se puede obligar a que nadie más cree un objeto HistoryList . Puede no saberse a priori quien va a necesitar el objeto y puede ser complejo estar pasándolo constantemente.Patrones de Creación Singleton (Único) Introducción Hay veces que se necesita esta funcionalidad Por ejemplo: Un histórico de todas las acciones que realiza el usuario en la aplicación. Patrones de Creación Singleton (Único) Introducción… Se podría crear el objeto al inicio y colocarlo en un atributo estático. Pero no se podría proporcionar ninguna información de inicialización justo cuando vaya a usarse y no se puede controlar quien accede al objeto . Este método crea la instancia si no se ha creado todavía. la guarda como un atributo estático privado y la devuelve Se puede crear el objeto directamente sobre el atributo estático . Ponga el constructor privado Ponga un método público estático getInstance() que devuelva el objeto.Patrones de Creación Singleton (Único) Aplicabilidad Cuando se requiera una instancia de una clase y accesible globalmente Descripción Asegura crear como máximo una instancia de un objeto. mantiene una referencia estática al único objeto de la clase y proporciona un método estático getInstance() para que otras clases accedan al único objeto El resto de la implementación es completamente normal .Patrones de Creación Singleton (Único) Implementación Clase que tiene privado el constructor. public class HistoryList { private static HistoryList instance = new HistoryList(). import java.Collections.List. } public void addCommand(String command) { history.util..add(command).util.. } public Object undoCommand() { return history.1).ArrayList.Patrones de Creación Singleton (Único) import java. private HistoryList() { } public static HistoryList getInstance() { return instance.util. import java. private List history = new ArrayList(). } .remove(history. } .size() . habría que cambiar todos los accesos a la clase Singleton . simplificando el desarrollo y haciendo la aplicación más mantenible Inconvenientes Puede tener problemas en aplicaciones con muchos hilos de ejecución y con una única instancia Si en el sistema evoluciona y se necesitan más instancias de la clase. asegurando la unicidad No se necesita pasar la referencia a todos los objetos que la necesiten.Patrones de Creación Singleton (Único) Ventajas La clase Singleton es la única que puede crear objetos de la clase. .Patrones de Creación Singleton (Único) Variaciones del patrón Mantener varias instancias que pueden ser obtenidas con versiones con parámetros del método getInstance(.. pueden ser de clases hijas diferentes dependiendo de los parámetros .) Cuando existen múltiples instancias. Patrones de Creación Singleton (Único) Patrones relacionados Abstract Factory (Factoría Abstracta) Builder (Constructor) Prototype (Prototipo) . Toolkit Variación del patrón porque Toolkit es abstracta y la instancia devuelta es de una clase hija El método es getDefaultToolkit() Clase java.Runtime El método es getRuntime() Clase java.lang. getDateInstance(int style). getDateTimeInstance().text.Patrones de Creación Singleton (Único) Patrón Singleton en la API de Java Clase java.awt. … .DateFormat Variación del patrón porque DateFormat es abstracta Tiene varios métodos con varias instancias getDateInstance(). Patrones de Creación Prototype (Prototipo) Propiedades Tipo: De creación. Nivel: Clase única Propósito Facilita la creación de objetos copia de otros objetos . Patrones de Creación Prototype (Prototipo) Introducción En muchas ocasiones es necesario crear objetos que tengan el mismo estado que otros objetos ya creados Se podría crear un objeto en su estado inicial y copiar el valor de cada atributo. Pero eso obligaría a desencapsular la clase El patrón consiste en crear un método copy que cree un objeto con el mismo estado que el que recibe el mensaje de copy . Patrones de Creación Prototype (Prototipo) Aplicabilidad Se utiliza el patrón Prototype para crear un objeto que sea copia de otro Descripción Permite copiar el estado de un objeto Se puede utilizar en las opciones de “copiar” y “pegar” . Patrones de Creación Prototype (Prototipo) Implementación Incluir un método de copia (copy) Este método devuelve un objeto de la misma clase cuyos atributos tienen los mismos valores que los atributos del objeto original Ventajas e Inconvenientes Crea copias sin necesidad de que el que necesita la copia conozca todos los atributos de lo copiado Hay que tener en cuenta la profundidad de la copia (copiar la referencia de un atributo o copiar el atributo en sí) . Patrones de Creación Prototype (Prototipo) Variaciones del patrón Constructor de copia. que recibe como parámetro un objeto de la misma clase y obtiene de él sus valores Patrones relacionados Abstract Factory (Factoría Abstracta) Factory Method (Método de Fabricación) . Patrones de Creación Prototype (Prototipo) Ejemplo . Patrones de Creación Factory Method (Método Factoría) También conocido como Virtual Builder (Constructor Virtual) Propiedades Tipo: De creación. Nivel: Clase Propósito Permite definir un método estándar en una clase para crear objetos. Las subclases deciden la clase concreta que crear . editar y añadir valores Esta aplicación tiene dos partes. La lista tiene un método para poner un valor (String) en una determinada posición (int) public void set(int position.Patrones de Creación Factory Method (Método Factoría) Introducción Supongamos una aplicación de gestión de una lista. la interfaz de usuario (un menú en modo texto) y la Lista. String value) . que permita borrar. Creamos la clase abstracta Selector (de la que heredan SLista y SMapa) El menú usa objetos de EstructuraDatos y Selector. De esta forma se pueden incorporar nuevas estructuras de datos .valor) Creamos la clase abstracta EstructuraDatos (de la que heredan Lista y Mapa).Patrones de Creación Factory Method (Método Factoría) … Se quiere generalizar la aplicación incorporando una estructura de datos tipo mapa (clave. pero no sabe que clase instanciar. si SLista o SMapa. El patrón Método Factoría propone que exista un método en EstructuraDatos que permita crear el objeto Selector correspondiente (Ver ejemplo) .Patrones de Creación Factory Method (Método Factoría) … El problema está en que el menú tiene que construir objetos de la clase Selector cuando le pregunta al usuario. Patrones de Creación Factory Method (Método Factoría) Ejemplo (ver código) . Cuando una subclase decide que objeto crear Sabe cuando crear un objeto.Patrones de Creación Factory Method (Método Factoría) Aplicabilidad Cuando se quiera crear un framework extensible. pero su clase depende de la clase de otro objeto . Ese método devuelve objetos que heredan de una clase abstracta (Product) Son las ConcreteCreator las que deciden la clase que hereda de Product (CocreteProduct) que deben instanciar .Patrones de Creación Factory Method (Método Factoría) Descripción Existe un método de fabricación en una clase abstracta (Creator) que debe ser implementado por las clases hijas (ConcreteCreator). Patrones de Creación Factory Method (Método Factoría) Implementación Patrones de Creación Factory Method (Método Factoría) Ventajas e Inconvenientes Con el polimorfismo podemos hacer código genérico para una clase. Con este patrón podemos hacer código genérico para varias clases y el código genérico puede instanciar objetos cuando quiere El inconveniente es que para añadir un producto nuevo hay que cambiar varias clases Patrones de Creación Factory Method (Método Factoría) Variaciones del Patrón Creator puede tener factoryMethod concreto y proporcionar una implementación por defecto El método de fabricación puede tomar parámetros y puede instanciar los ConcreteProduct dependiendo del parámetro Creator y Product pueden ser interfaces Patrones relacionados Abstract Factory (Fábrica Abstracta) Prototype (Prototipo) Template Method (Método Plantilla) Patrones de Comportamiento Están relacionados con el flujo de control del sistema Ciertas formas de organizar el control en un sistema pueden derivar en grandes beneficios para la eficiencia y el mantenimiento del sistema . Patrones de Comportamiento Chain of Responsability (Cadena de Responsabilidad) Establece una cadena en un sistema. para que un mensaje pueda ser manejado en el nivel en el que se recibe en primer lugar o ser redirigido a otro objeto que pueda manejarlo Command (Comando) Encapsula un comando en un objeto de tal forma que pueda ser almacenado. pasado a métodos y devuelto igual que otro objeto Interpreter (Intérprete) Define un intérprete para un lenguaje . Patrones de Comportamiento Iterator (Iterador) Proporciona una forma coherente de acceder secuencialmente a los elementos de una colección. independientemente del tipo de colección Mediator (Mediador) Simplifica la comunicación entre los objetos de un sistema introduciendo un único objeto que gestiona la distribución de mensajes entre los otros . Estos comportamientos pueden ser fácilmente intercambiados.Patrones de Comportamiento Observer (Observador) Proporciona a los componentes una forma flexible de enviar mensajes de difusión a los receptores interesados State (Estado) Permite modificar fácilmente el comportamiento de un objeto en tiempo de ejecución Strategy (Estrategia) Define un grupo de clases que representa un conjunto de posibles comportamientos. . Este patrón centraliza los comportamientos y permite que sean modificados o ampliados sin cambiar las clases sobre las que actúan .Patrones de Comportamiento Visitor (Visitante) Proporciona una forma fácil y sostenible de ejecutar acciones en una familia de clases. pasado a métodos y devuelto igual que cualquier otro objeto .Patrones de Comportamiento Command (Comando) Propiedades Tipo: De comportamiento Nivel: Objeto Propósito Encapsular un comando en un objeto de tal forma que pueda ser almacenado. la aplicación necesita saber desde dónde obtener los datos y el comportamiento relevantes Normalmente. Ese objeto tiene el comportamiento y los datos necesario para una acción específica . la aplicación mantendrá la lógica en un lugar centralizado Los usuarios pueden necesitar deshacer las acciones realizadas Es lógico combinar la acción en un objeto: el objeto comando.Patrones de Comportamiento Command (Comando) Introducción Cuando un usuario selecciona una acción para ejecutarla. Patrones de Comportamiento Command (Comando) Aplicabilidad Dar soporte para deshacer comandos.. procesos de identificación.. Poner en cola y ejecutar comandos en momentos distintos Desacoplar la fuente de una petición del objeto que la cumple . etc. Patrones de Comportamiento Command (Comando) Descripción Una aplicación que no use el patrón Command tendrá que proporcionar una clase manejadora de código para controlar todos los eventos que puedan ocurrir El patrón Command encapsula los datos y funcionalidad necesarias para cumplir una acción o una petición específicas Proporciona una separación entre cuándo hay que ejecutar una acción y cómo tiene que ser ejecutada . Patrones de Comportamiento Command (Comando) Implementación . Patrones de Comportamiento Command (Comando) . Command: Interfaz de todos los comandos Invoker: El que decide cuando ejecutar el comando Receiver: El objeto sobre el que se ejecutará el comando ConcreteCommand: Implementación de Command... Mantiene una referencia al Receiver para realizar las acciones cuando se le llama a execute . .Patrones de Comportamiento Command (Comando) Ventajas Desacopla la fuente o el disparador del evento del objeto que tiene conocimiento para ejecutar la tarea Permite reemplazar los objetos command y receiver en tiempo de ejecución Al ser los comando objetos normales.. es más sencillo hacer log. tan sólo creando una nueva implementación de command . . Facilita la introducción de nuevos comandos. deshacer. Al realizar la acción se guarda lo necesario para deshacer la acción y se incorpora un método undo() MacroCommand: Se puede crear un comando que esté compuesto por otros comandos y que pueda ser gestionado de manera uniforme (usando el patrón Composite) .Patrones de Comportamiento Command (Comando) Variaciones Deshacer: El patrón command puede ser extendido para incorporar la posibilidad de deshacer. para crear el deshacer Prototype (Prototipo): Puede ser usado para copiar el comando antes de incluirlo en el historial Singletón (Único): En la mayoría de las aplicaciones.Patrones de Comportamiento Command (Comando) Patrones relacionados Composite (Compuesto): Para implementar el patrón compuesto Memento (Recuerdo): Guarda el estado del receptor. el historial se implementa como un singleton . Patrones de Comportamiento Command (Comando) Ejemplo (ver código) En la aplicación de citas se incorpora un comando con opciones de deshacer . independientemente del tipo de colección subyacente .Patrones de Comportamiento Iterator (Iterador) También conocido como Cursor Propiedades del patrón Tipo: De comportamiento Nivel: Componente Propósito Proporcionar una forma coherente de acceder secuencialmente a los elementos de una colección. listas enlazadas o árboles (por si los elementos están ordenados) Lo habitual es recorrer secuencialmente los elementos de la colección .Patrones de Comportamiento Iterator (Iterador) Introducción Las estructuras de datos pueden estar implementadas de muchas formas Pueden usarse arrays. Usar un índice que se va incrementando podría ser muy ineficiente para implementaciones basadas en árboles o listas enlazadas for(int i=0. i++){ System.size().. independientemente de su implementación . } El patrón Iterator resuelve este problema definiendo una interfaz uniforme y eficiente para recorrer cualquier estructura de datos de forma secuencial.Patrones de Comportamiento Iterator (Iterador) .println(“Elemento:“+lista.out.get(i)). i<lista.. coherente e independiente de la implementación. permitiendo que distintos clientes naveguen simultáneamente por la misma colección . con el fin de desplazarse por los elementos de una colección Permitir el recorrido de múltiples colecciones.Patrones de Comportamiento Iterator (Iterador) Aplicabilidad Proporcionar una forma uniforme. Patrones de Comportamiento Iterator (Iterador) Descripción El interfaz Iterator tiene las siguientes operaciones básicas Navegación: Desplazarse hacia delante (y quizás hacia atrás) Recuperación: Obtener el elemento en la posición actual Control de fin de colección: Determinar si hay un elemento siguiente Algunas versiones extendidas permiten eliminar el elemento referenciado . next().hasNext(). } .Patrones de Comportamiento Iterator (Iterador) Implementación for(Iterator it = lista. System.iterator().out.println(“Objeto: “+o).){ Objeto o = it. it. lo cual puede generar problemas si no se tiene en cuenta .5 incorpora un for mejorado para iterar por los elementos de cualquier colección que implemente Iterable for(Object objeto: lista){ System. } Inconvenientes En estructuras de datos no ordenadas (conjunto. mapa) el orden de los elementos al recorrerlos puede ser diferente en diferentes recorridos.println(“Objeto: “+objeto).Patrones de Comportamiento Iterator (Iterador) Ventajas Se simplifica el acceso secuencial a los elementos de cualquier estructura de datos Java 1.out. grafos) por tanto.Patrones de Comportamiento Iterator (Iterador) Variaciones del Patrón Existen iteradores que crean una copia de la estructura de datos al ser creados. por si se modifica durante el recorrido Pueden existir diferentes formas de recorrer estructuras complejas (árboles. se podrían implementar diferentes iteradores . Patrones de Comportamiento Iterator (Iterador) Patrones relacionados Factory Method (Método Factoría): el método iterator() es un método factoría Visitor (Visitador) . Patrones de Comportamiento Observer (Observador) También conocido como Publisher-Subscriptor (Editor-Suscriptor) Propiedades del patrón Tipo: De comportamiento Nivel: Componente Propósito Proporcionar a los componentes una forma flexible de enviar mensajes de difusión a los receptores interesados . Patrones de Comportamiento Observer (Observador) Introducción En muchas ocasiones ciertas partes de un sistema deben conocer un cambio en otras partes La solución típica es hacer que la parte que cambia invoque un método de la parte interesada Pero hay veces que la parte que cambia se desarrolla de forma independiente a la parte interesada La parte que cambia es una librería y la parte interesada está en nuestro programa La parte que cambia es genérica y la parte interesada no se puede determinar (un campo de texto en un interfaz de usuario) . Lo ideal es permitir que los interesados indiquen a la parte que cambia que están interesados en los cambios Las partes interesadas deben implementar un interfaz.. les invoca un método del interfaz .Patrones de Comportamiento Observer (Observador) .. que posee uno o varios métodos que serán invocados cuando algo cambie La parte que cambia guarda a los interesados en una lista y cuando algún cambio sucede. Patrones de Comportamiento Observer (Observador) Aplicabilidad Al menos un emisor de mensajes (una parte que cambia y que notifica el cambio a los demás) Uno o más receptores de mensajes El emisor no conoce como los receptores actúan ante el cambio. simplemente lo notifica Los receptores pueden no conocerse cuando se desarrolla el emisor Suelen ser muy usados en interfaces gráficas porque los componentes son observados por la lógica de la aplicación para actuar en consecuencia . actuar ante cambios . que a su vez.Patrones de Comportamiento Observer (Observador) Descripción Considera una factura con líneas de detalle El total de la factura depende del total de cada línea. depende de la cantidad y del precio por unidad Otro tipo de información puede depender del total de la factura El patrón observer es apropiado porque permite crear la factura completamente y posteriormente en el desarrollo. La responsabilidad del componente observable es transmitir los eventos a los observadores interesados (aquellos registrados) Una interfaz oyente permite a los componentes observables indicar los eventos que han ocurrido y posiblemente proporcionar detalles a los observadores . Uno o más receptores de mensajes (los observadores) reciben esos eventos y actúan en consecuencia... Los productores de mensajes (componentes observables) generan eventos.Patrones de Comportamiento Observer (Observador) . Patrones de Comportamiento Observer (Observador) Implementación . . Observable La clase cuyos objetos son susceptibles de ser observados Proporciona métodos para registrar un observador o eliminarlo Tiene una lista con todos los observadores registrados Tiene un método protegido que es invocado dentro de la clase cuando haya que notificar un cambio a los observadores ..Patrones de Comportamiento Observer (Observador) . Patrones de Comportamiento Observer (Observador) .. Observer Interfaz que usan los Observable para comunicarse con los interesados ConcreteObserver Implementa la interfaz Observer y determina en la implementación de los métodos como responder a los mensajes recibidos de Observable Event Mantiene información sobre el evento o cambio producido que puede ser útil para el Observer .. Patrones de Comportamiento Observer (Observador) Ventajas e Inconvenientes El objeto observable puede ser relativamente simple porque las acciones que se desencadenan ante un cambio no están en la propia clase Facilita la realización de pruebas porque se puede codificar un observador de log Facilita el desarrollo incremental porque se pueden añadir observadores conforme los vayas codificando . .Patrones de Comportamiento Observer (Observador) Ventajas e Inconvenientes. El principal problema del patrón es como hacer los eventos que se envían Eventos genéricos Son más fáciles de codificar pero puede ser difícil para un observador saber lo que ha pasado Diferentes Eventos concretos Los observadores saben con detalle el cambio Se complica la codificación de los eventos porque hay que considerar muchas situaciones .. Patrones de Comportamiento Observer (Observador) Variaciones del patrón En algunas ocasiones puede soportar únicamente un único observador Componentes observables multihilo. cada notificación se hace en el hilo del observer Envío de la referencia al observable en el propio evento para que los observers puedan invocar métodos en el observable con el fin de descubrir más información sobre el cambio . Patrones de Comportamiento Observer (Observador) Patrones relacionados Proxy RemoteProxy . OBSERVER(Ejemplo) public abstract class Subject { private List<Observer> observers.remove(o).subject = s.get(i). protected Subject getSubejct() { return this. } public void notify() { for (int i = 0.observers.observers. } public void remove(Observer o) { this. } public abstract void update(). } public Observer(Subject s) { this. } public Subject() { this. } } public abstract class Observer { private Subject subject.observers.size(). public void add(Observer o) { this.add(o).subject. } .update().observers = new ArrayList<Observer>().observers. i<this. i++) this. update(). sig = (sig+1)%3.OBSERVER(Ejemplo) public class Dominio extends Subject { private double a.a = s[0]. s[0] = this. this.c. this. public Dominio(double[3] s) { super(). this. this.redibujar(). this. return s. this. this.c= s[2]. this.b.getSubject()).getState().notify(). public Vista1(Dominio d) { super(d).c= s[2]. } public double[3] getState() { double[3] s = new double[3]. c.a = s[0].a. s[1] = this.b = s[1].tabla[sig] = s. } public void setState(double[3] s) { this. private int sig = 0. this.b = s[1]. } } . } } public class Vista1 extends Observer { private double[][] tabla = new double[3][3]. s[2] = this. b. } public void update() { double[3] s = ((Dominio). b = s[1]. super(d). private double a. b.getState(). c = s[2]. a = s[0]. c. } } } } . c.redibujar().OBSERVER(Ejemplo) public class Vista3 extends Observer public class Vista2 extends Observer { { private double a. public Vista3(Dominio d) public Vista2(Dominio d) { { super(d). b.getState(). double[3] s = ((Dominio)getSubject()). a = s[0].update(). this. this.redibujar(). this.update(). } } public void update() public void update() { { double[3] s = ((Dominio)getSubject()). this. b = s[1]. c = s[2]. Patrones Estructurales Describen formas efectivas de particionar y combinar los elementos de una aplicación El patrón Adapter permite que dos sistemas se comuniquen El patrón Facade permite presentar una interfaz simplificada a un usuario sin eliminar todas las opciones disponibles en el sistema . Esto hace que sea más fácil cambiar cualquier aspecto del componente .Patrones Estructurales Adapter (Adaptador) Sirve como un intermediario entre dos clases. convirtiendo las interfaces de una clase para que pueda ser utilizada por otra Bridge (Puente) Divide un componente complejo en dos jerarquías relacionadas –la abstracción funcional y la implementación interna-. permitiendo a la vez que todos los elementos de la estructura funcionen con una interfaz uniforme Decorator (Decorador) Proporciona una forma flexible de introducir o eliminar funcionalidad a un componente sin modificar su apariencia externa o su función .Patrones Estructurales Composite (Compuesto) Desarrolla una forma flexible de crear jerarquías en estructura de árbol de una complejidad arbitraria. Patrones Estructurales Facade (Fachada) Proporciona una interfaz simplificada para un grupo de subsistemas o un sistema complejo Flyweight (Peso ligero) Reduce el número de objetos detallados de muy bajo nivel en un sistema mediante la compartición de objetos Proxy (Representante) Proporciona un representante de otro objeto. por distintas razones como pueden ser el acceso. la velocidad o la seguridad . permitiendo a la vez que todos los elementos de la estructura funcionen con una interfaz uniforme .Patrones Estructurales Composite (Compuesto) Propiedades del Patrón Tipo: Estructural Nivel: Componente Propósito Desarrollar una forma flexible de crear jerarquías en estructura de árbol de una complejidad arbitraria. permisos…) .Patrones Estructurales Composite (Compuesto) Introducción Se desea gestionar un sistema de ficheros Existen directorios que tienen ficheros y otros subdirectorios. que pueden tener ficheros Sin límite de profundidad Hay operaciones que se quieren realizar sobre un directorio o sobre un fichero (tamaño en disco. Para realizar una acción que tenga en cuenta un subárbol completo.Patrones Estructurales Composite (Compuesto) Introducción.. se puede realizar un iterador que recorra el árbol en un orden determinado y vaya realizando los cálculos El patrón composite propone utilizar el polimorfismo y la recursividad para realizar cálculos sobre un subárbol .. Patrones Estructurales Composite (Compuesto) Introducción. ... FileSystemElem: Clase padre de Fichero y Directorio File: Devuelve el tamaño del fichero Directory: Devuelve la suma de los FileSystemElem y añade el tamaño de almacenar un directorio en disco (p..e 1kbyte) ..Patrones Estructurales Composite (Compuesto) Introducción. contenedor-contenido La estructura pueda tener cualquier nivel de profundidad Se desea realizar operaciones con todos los elementos del árbol (o subárbol) . parte-todo.Patrones Estructurales Composite (Compuesto) Aplicabilidad Cuando exista un componente en estructura rama-hoja. Tienen una colección de Component Node Clase hoja.Patrones Estructurales Composite (Compuesto) Descripción Component Clase o interface padre de todos los elementos del árbol. Especifica las operaciones Composite Clase que representa a las ramas. contiene el comportamiento final. No pueden contener otros componentes . Patrones Estructurales Composite (Compuesto) Implementación . Patrones Estructurales Composite (Compuesto) Ventajas e Inconvenientes Proporciona gran flexibilidad en la estructura y una interfaz muy manejable Sin importar la posición actual en la estructura, se puede llamar a cualquier método del componente Al tener tanta flexibilidad es más complicado de probar Patrones Estructurales Composite (Compuesto) Variaciones del patrón El nodo raíz: para mejorar la manejabilidad del sistema, algunas implementaciones del patrón Composite definen un objeto distinto que actúa como base para el árbol Ramificación con reglas: hay veces en estructuras complejas que es necesario imponer restricciones en las composiciones Patrones Estructurales Composite (Compuesto) Patrones relacionados Chain of Responsability Flyweight Iterator Visitor Ejemplo Crea una estructura de datos orientada a objetos que permita almacenar expresiones y que permite calcular su valor 5 + (5 * (2 – 9)) 8 / ( (14 * 34) + (22 + 4) ) .
Copyright © 2024 DOKUMEN.SITE Inc.