Patrones de Diseño (Recopilación)
description
Transcript of Patrones de Diseño (Recopilación)
![Page 1: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/1.jpg)
Diseño con Patrones
Yupanqui García, Glen Jasper
05200080
Diseño de Sistemas
[Referencia: Reutilización del Software]
![Page 2: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/2.jpg)
Introducción
2
El diseño OO es difícil y el diseño de software orientado a objetos reutilizable lo es aún más.
Los diseñadores expertos no resuelven los problemas desde sus principios; reutilizan soluciones que han funcionado en el pasado. Se encuentran patrones de clases y objetos de
comunicación recurrentes en muchos sistemas orientados a objetos.
Estos patrones resuelven problemas de diseño específicos y hacen el diseño flexible y reusable.
![Page 3: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/3.jpg)
Definición de un patrón
3
Alexander(arquitecto/urbanista)Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno y describe también el núcleo de la solución al problema, de forma que puede utilizarse un millón de veces sin tener que hacer dos veces lo mismo.
![Page 4: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/4.jpg)
Definición de un patrón de diseño
4
[Gamma]Un patrón de diseño es una descripción de clases y objetos comunicándose entre sí adaptada para resolver un problema de diseño general en un contexto particular.
![Page 5: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/5.jpg)
Introducción
5
Es un tema importante en el desarrollo de software actual: permite capturar la experiencia
Busca ayudar a la comunidad de desarrolladores de software a resolver problemas comunes, creando un cuerpo literario de base Crea un lenguaje común para comunicar ideas y
experiencia acerca de los problemas y sus soluciones El uso de patrones ayuda a obtener un software
de calidad (reutilización y extensibilidad)
![Page 6: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/6.jpg)
Elementos de un patrón
6
Nombre: describe el problema de diseño. El problema: describe cuándo aplicar el
patrón. La solución: describe los elementos que
componen el diseño, sus relaciones, responsabilidades y colaboración.
![Page 7: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/7.jpg)
Ventajas de los patrones de diseño
7
Son soluciones concretas: Un catálogo de patrones es un conjunto de recetas de diseño. Aunque se pueden clasificar, cada patrón es independiente del
resto. Son soluciones técnicas:
Dada una determinada situación, los patrones indican cómo resolverla mediante un D.O.O.
Existen patrones específicos para un lenguaje determinado, y otros de carácter más general.
Se aplican en situaciones muy comunes: Proceden de la experiencia. Han demostrado su utilidad para resolver problemas que
aparecen frecuentemente en el D.O.O.
![Page 8: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/8.jpg)
Ventajas de los patrones de diseño
8
Son soluciones simples: Indican cómo resolver un problema particular utilizando
un pequeño número de clases relacionadas de forma determinada.
No indican cómo diseñar un sistema completo, sino sólo aspectos puntuales del mismo.
Facilitan la reutilización de las clases y del propio diseño: Los patrones favorecen la reutilización de clases ya
existentes y la programación de clases reutilizables. La propia estructura del patrón es reutilizada cada vez
que se aplica.
![Page 9: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/9.jpg)
Inconvenientes
9
El uso de un patrón no se refleja claramente en el código: A partir de la implementación es difícil determinar qué patrón de diseño
se ha utilizado. No es posible hacer ingeniería inversa.
Referencias a “self”: Muchos patrones utilizan la delegación de operaciones y esto provoca el
conocido problema del ámbito local de los objetos (self). Es difícil reutilizar la implementación de un patrón:
Las clases del patrón son roles genéricos, pero en la implementación aparecen clases concretas.
Los patrones suponen cierta sobrecarga de trabajo a la hora de implementar: Se usan más clases de las estrictamente necesarias. A menudo un mensaje se resuelve mediante delegación de varios
mensajes a otros objetos.
![Page 10: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/10.jpg)
Clasificación de los patrones
10
Según su ámbito: Patrones de clases . Tratan con relaciones de
herencia (estática) entre clases. Patrones de objetos . Se refieren a relaciones
de composición entre objetos, que pueden cambiar en tiempo de ejecución y son más dinámicas.
![Page 11: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/11.jpg)
Clasificación de los patrones
11
Según su propósito: De creación: conciernen al proceso de creación
de objetos. De estructura: tratan la composición de clases
y/o objetos. De comportamiento: caracterizan las formas en
las que interactúan y reparten responsabilidades las distintas clases u objetos.
![Page 12: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/12.jpg)
Clasificación de los patronesGoF (gang of Four) [Gamma]
12
![Page 13: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/13.jpg)
Patrones de diseño fundamentales
13
Son patrones que no aparecen la tabla definida por Gamma, pero se utilizan habitualmente:
DELEGATION INTERFACE MARKER INTERFACE
![Page 14: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/14.jpg)
Patrón DELEGATION
14
Utilidad:Cuando se quiere extender y reutilizar la funcionalidad de una clase SIN UTILIZAR LAHERENCIA
Ventajas: En vez de herencia múltiple Cuando una clase que hereda de otra quiere ocultar
algunos de los métodos heredados Compartir código que NO se puede heredar
![Page 15: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/15.jpg)
Patrón DELEGATIONEl problema
15
![Page 16: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/16.jpg)
Patrón DELEGATIONLa solución
16
![Page 17: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/17.jpg)
Patrón DELEGATIONImplementación
17
![Page 18: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/18.jpg)
Patrón INTERFACEUtilidad y Ventajas
18
Utilidad Definir un comportamiento independiente de
donde vaya a ser utilizado Ventajas
Desacople entre comportamiento y clase. Realización de clases “Utilities”
![Page 19: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/19.jpg)
Patrón INTERFACEEl problema
19
![Page 20: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/20.jpg)
Patrón INTERFACELa Solución
20
![Page 21: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/21.jpg)
Patrón INTERFACEImplementación
21
![Page 22: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/22.jpg)
Patrón INTERFACEEjemplo
22
![Page 23: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/23.jpg)
Patrón MARKER INTERFACEUtilidad y Ventajas
23
Utilidad Sirve para indicar atributos semánticos de una clase.
Ventajas: Se puede preguntar si un objeto pertenece a una clase de
un determinado tipo o no. Habitualmente se utiliza en clases de utilidades que
tienen que determinar algo sobre objetos sin asumir que son instancias de una determinada clase o no.
![Page 24: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/24.jpg)
Patrón MARKER INTERFACE
24
![Page 25: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/25.jpg)
Patrón MARKER INTERFACEEjemplo
25
En Java hay clases “serializables”, “cloneables”, etc. Para ello, basta con que implementen las interfaces Serializable, Cloneable, etc.
![Page 26: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/26.jpg)
Clasificación de los patronesGoF (gang of Four) [Gamma]
26
![Page 27: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/27.jpg)
Patrón SINGLETON
27
Utilidad Asegurar que una clase tiene una sola instancia y
proporcionar un punto de acceso global a ella Ventajas
Es necesario cuando hay clases que tienen que gestionar de manera centralizada un recurso
Una variable global no garantiza que sólo se instancie una vez
![Page 28: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/28.jpg)
Patrón SINGLETONLa solución
28
![Page 29: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/29.jpg)
Patrón SINGLETONImplementación
29
![Page 30: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/30.jpg)
Patrón SINGLETONInconvenientes
30
![Page 31: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/31.jpg)
31
![Page 32: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/32.jpg)
Patrón FACTORY METHOD
32
Utilidad Separar la clase que crea los objetos, de la
jerarquía de objetos a instanciar Ventajas
Centralización de la creación de objetos Facilita la escalabilidad del sistema El usuario se abstrae de la instancia a crear
![Page 33: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/33.jpg)
Patrón FACTORY METHODEl problema
33
![Page 34: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/34.jpg)
Patrón FACTORY METHODUna primera solución
34
![Page 35: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/35.jpg)
Patrón FACTORY METHODLa solución final
35
![Page 36: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/36.jpg)
Patrón FACTORY METHOD
36
![Page 37: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/37.jpg)
Patrón FACTORY METHOD
37
![Page 38: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/38.jpg)
Clasificación de los patronesGoF (gang of Four) [Gamma]
38
![Page 39: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/39.jpg)
Patrón ADAPTER
39
Intención Convertir la interfaz de una clase en otra interfaz
esperada por los clientes. Permite que clases con interfaces incompatibles se
comuniquen
Ventajas Se quiere utilizar una clase ya existente y su interfaz no
se corresponde con la interfaz que se necesita Se quiere envolver código no orientado a objeto con
forma de clase
![Page 40: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/40.jpg)
Patrón ADAPTEREl problema
40
![Page 41: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/41.jpg)
Patrón ADAPTERLa solución
41
![Page 42: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/42.jpg)
Patrón ADAPTERDiagrama de interacción
42
![Page 43: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/43.jpg)
Patrón ADAPTER
43
Convierte la interfaz de una clase en otra interfaz que los clientes esperan. Permite que clases con interfaces incompatibles puedan ser utilizadas conjuntamente. La interfaz de la clase B (los métodos b1(),b2()…)
los convierte/adapta a los métodos esperados por la clase A (métodos m1(),m2(),…)
![Page 44: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/44.jpg)
Patrón ADAPTEREjemplo de uso en JGL
44
![Page 45: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/45.jpg)
Patrón ADAPTEREjemplo I
45
![Page 46: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/46.jpg)
Patrón ADAPTEREjemplo II
46
![Page 47: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/47.jpg)
Patrón COMPOSITE
47
![Page 48: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/48.jpg)
Patrón COMPOSITEEl problema: La escalabilidad
48
![Page 49: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/49.jpg)
Patrón COMPOSITELa solución
49
![Page 50: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/50.jpg)
Patrón COMPOSITELa solución
50
![Page 51: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/51.jpg)
Patrón COMPOSITEEjemplo: La jerarquía de clases de AWT
51
Sirve para diseñar clases que agrupen a objetos complejos, los cuales a su vez están formados por objetos complejos y/o simples.
La jerarquía de clases AWT se ha diseñado según el patrón COMPOSITE
![Page 52: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/52.jpg)
Patrón COMPOSITEEjemplo: La jerarquía de clases de AWT
52
Las posibilidades son infinitas… Una ventana formada por 2 cajas de texto, 2 campos de texto, 3
botones, 1 panel que contenga 5 casillas de validación y una lista desplegable.
Una ventana formada por 2 etiquetas, 2 campos de texto y un botón -…
Además, añadir nuevos tipos de contenedores y de componentes no sería muy costoso (estaríamos ante una solución extensible)
![Page 53: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/53.jpg)
Patrón COMPOSITEUn diseño francamente malo …
53
Se necesitarían métodos addButton, addCheckBox, addTextField, addFrame en la clase Frame (y los correspondientes a todos los que faltan)
Además el diagrama está muy incompleto, ya que un Button puede ser componente de un Panel, Dialog, …
Si se quisiera añadir un nuevo componente XXX, habría que cambiar la clase Frame y añadir el método addXXX (nada extensible)
![Page 54: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/54.jpg)
Componentes principales de Swing
54
![Page 55: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/55.jpg)
Patrón FACADE
55
Intención: El patrón FACADE simplifica el acceso a un conjunto de clases proporcionando una única clase que todos utilizan para comunicarse con dicho conjunto de clases.
Ventajas Los clientes no necesitan conocer las clases que hay tras
la clase FACADE. Se pueden cambiar las clases “ocultadas” sin necesidad
de cambiar los clientes. Sólo hay que realizar los cambios necesarios en FACADE.
![Page 56: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/56.jpg)
Patrón FACADEEl problema
56
La clase A debe saber cuál es exactamente la clase que le proporciona el servicio: b1() es de B, c1() de C, d1() de D, ...
![Page 57: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/57.jpg)
Patrón FACADEEl problema
57
![Page 58: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/58.jpg)
Patrón FACADELa solución
58
![Page 59: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/59.jpg)
Patrón FACADEEjemplo: Estructurar un entorno de programación
59
![Page 60: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/60.jpg)
Clasificación de los patronesGoF (gang of Four) [Gamma]
60
![Page 61: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/61.jpg)
Patrón OBSERVER
61
Intención Definir una dependencia 1:n de forma que cuando el
objeto 1 cambie su estado, los n objetos sean notificados y se actualicen automáticamente
Motivación En un toolkit de GUI, separar los objetos de
presentación (vistas) de los objetos de datos, de forma que se puedan tener varias vistas sincronizadas de los mismos datos (editor-subscriptor)
![Page 62: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/62.jpg)
Patrón OBSERVEREjemplo
62
![Page 63: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/63.jpg)
Patrón OBSERVERLa solución
63
![Page 64: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/64.jpg)
Patrón OBSERVERDiagrama de interacción
64
![Page 65: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/65.jpg)
Patrón OBSERVERLa clase Observable
65
![Page 66: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/66.jpg)
Patrón OBSERVEROtro Ejemplo
66
![Page 67: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/67.jpg)
Patrón OBSERVEREjemplo: La clase Observable (el modelo)
67
![Page 68: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/68.jpg)
Patrón OBSERVEREjemplo: La clase Observer (la vista)
68
![Page 69: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/69.jpg)
Patrón OBSERVEREjemplo: El programa principal
69
![Page 70: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/70.jpg)
70
![Page 71: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/71.jpg)
71
![Page 72: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/72.jpg)
72
![Page 73: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/73.jpg)
Patrón OBSERVERInicialización
73
![Page 74: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/74.jpg)
Patrón OBSERVERAdaptabilidad de la solución
74
Si se quisiera añadir un nuevo OBSERVER que en vez de pintar escribiera un número para cada color (1 si ROJO, 2 si VERDE, 3 si AZUL), ¿qué habría que hacer? Escribir nueva clase OBSERVER que implemente
“notificar”
Si se quisiera cambiar el SUBJECT para escoger el color pinchando un Checkbox en vez de escogerlo de un Choice Hay que sustituir el Subject y llamar a “notificar”
de los observers cuando se seleccione un nuevo Checkbox.
![Page 75: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/75.jpg)
75
![Page 76: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/76.jpg)
76
![Page 77: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/77.jpg)
77
![Page 78: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/78.jpg)
Patrón STRATEGY
78
Intención: Encapsular algoritmos relacionados en clases y
hacerlos intercambiables. Se permite que la selección del algoritmo se haga
según el objeto que se trate.
Ventajas Se permite cambiar el algoritmo dinámicamente Se eliminan sentencias condicionales para
seleccionar el algoritmo deseado
![Page 79: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/79.jpg)
Patrón STRATEGYLa solución
79
![Page 80: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/80.jpg)
Patrón STRATEGY
80
La clase Cliente necesita ejecutar un método: operac(), que puede ser implementado siguiendo distintos algoritmos. Se pueden implementar todos ellos (en las clases StrConcrX) y ser trasparente a Cliente.
![Page 81: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/81.jpg)
Patrón STRATEGYImplementación
81
![Page 82: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/82.jpg)
Patrón STRATEGYImplementación
82
![Page 83: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/83.jpg)
Patrón ITERATOR
83
Intención: Proporcionar una forma de acceder a los elementos de
una colección de objetos de manera secuencial sin revelar su representación interna. Define una interfaz que declara métodos para acceder secuencialmente a la colección.
Ventajas: La clase que accede a la colección solamente a través de
dicho interfaz permanece independiente de la clase que implementa la interfaz.
![Page 84: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/84.jpg)
Patrón ITERATOR
84
Participantes Iterador: define una interfaz para acceder a los elementos del
agregado y recorrerlos IteradorConcreto: implementa la interfaz de Iterador y mantiene la
posición actual del recorrido Agregado: define una interfaz para crear un objeto iterador AgregadoConcreto: implementa la interfaz de creación del iterador
para devolver una instancia apropiada de IteradorConcreto
![Page 85: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/85.jpg)
Patrón ITERATOR
85
Ejemplos en Java:
![Page 86: Patrones de Diseño (Recopilación)](https://reader035.fdocument.pub/reader035/viewer/2022062303/5571f2ef49795947648d4702/html5/thumbnails/86.jpg)
86
Muchas Gracias...