8 patrones de diseño - creacion.pdf
TRANSCRIPT
![Page 1: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/1.jpg)
Ingeniería de Sistemas
![Page 2: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/2.jpg)
• Introducción. • Patrones. • Descripción de los Patrones. • Ejemplo: Patrones en el MVC de Smalltalk. • El catálogo de patrones.
• Patrones de Creación. • Patrones Estructurales. • Patrones de Comportamiento.
![Page 3: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/3.jpg)
“Una arquitectura orientada a objetos bien estructurada está llena de patrones. La calidad de un sistema orientado a objetos se mide por la atención que los diseñadores han prestado a las colaboraciones entre sus objetos.”
“Los patrones conducen a arquitecturas más pequeñas, más simples y más comprensibles”
G. Booch
![Page 4: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/4.jpg)
4
“Diseñar software orientado a objetos es difícil pero diseñar software orientado a objetos reutilizable es más difícil todavía. Diseños generales y flexibles son muy difíciles de encontrar la primera vez”
¿Qué conoce un programador experto que
desconoce uno inexperto?
Reutilizar soluciones que funcionaron en el pasado: Aprovechar la experiencia
![Page 5: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/5.jpg)
Hardware Software
Poder reusar componentes y lograr un mantenimiento fácil. Lograr un software flexible
habitualmente
![Page 6: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/6.jpg)
Problema Solución
Patrones de diseño
![Page 7: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/7.jpg)
Un esquema que se usa para solucionar un problema.
El esquema ha sido probado extensivamente, y ha funcionado. Se tiene experiencia sobre su uso.
Elementos principales: ◦ Nombre ◦ Problema ◦ Solución: Descripción abstracta ◦ Consecuencias
![Page 8: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/8.jpg)
Reutilizar diseños abstractos que no incluyan detalles de la implementación.
Un patrón es una descripción del problema y la esencia de su solución, que se puede reutilizar en casos distintos.
Es una solución adecuada a un problema común.
Asociado a orientación a objetos, pero el principio general es aplicable a todos los enfoques de diseño software.
![Page 9: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/9.jpg)
Nombre del patrón. ◦ Describe el problema de diseño, junto con sus soluciones y
consecuencias. ◦ Vocabulario de diseño.
Problema. ◦ Describe cuándo aplicar el patrón. ◦ Explica el problema y su contexto.
Solución. ◦ Elementos que forman el diseño, relaciones, responsabilidades. ◦ No un diseño concreto, sino una plantilla que puede aplicarse en
muchas situaciones distintas. Consecuencias. ◦ Resultados, ventajas e inconvenientes de aplicar el patrón. ◦ ej.: relación entre eficiencia en espacio y tiempo; cuestiones de
implementación etc.
![Page 10: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/10.jpg)
![Page 11: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/11.jpg)
Separar los objetos con los datos ( modelo), sus visualizaciones (vistas) y el modo en que la interfaz reacciona ante la entrada al usuario (controlador).
Separar estos componentes, para aumentar la flexibilidad y reutilización.
Desacoplar vistas de modelos, mediante un protocolo de subscripción/notificación.
Cada vez que cambian los datos del modelo, avisar a las vistas que dependen de él. Estas se actualizan.
![Page 12: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/12.jpg)
![Page 13: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/13.jpg)
![Page 14: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/14.jpg)
Asignación de Responsabilidades – Larman GRASP
Creación – Gamma y Grand Fcatory Method, Abstract Factory, Builder, Prototype, Singleton, etc.
Estructurales – Gamma y Grand Adapter, Iterator, Bridge, facade, Flyweight, Virtual Proxy, etc.
Arquitecturales – Bushman Distribuidos, Interactivos, adaptables, etc
![Page 15: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/15.jpg)
Larman 10 patrones Gamma 23 patrones Bushman 17 patrones Grand 41 patrones
![Page 16: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/16.jpg)
PATRONES
GOF
GRASP
Experto
Creador
Bajo acoplamiento
Alta Cohesión
Controlador
Creacionales
Estructurales
Comportamiento
Instancia única, método de fabricación ,
Fabrica, constructor, prototipo .
Adaptador, puente, objeto Compuesto, envoltorio, fachada,
Peso ligero, proxy
Cadena responsabilidad, orden, Intérprete, iterador, mediador, recuerdo,
Observador, estado, estrategia, método plantilla, visitante
![Page 17: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/17.jpg)
Son para la asignación de responsabilidades, "General Responsibility Assignment Software Patterns". Son una serie de "buenas prácticas" de aplicación recomendable en el diseño de software. Patrones GRASP:
Experto, Creador, Bajo Acoplamiento, Alta Cohesión, Controlador
![Page 18: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/18.jpg)
En que consiste la responsabilidad? Obligaciones o contratos de una clase
Dos clases de responsabilidades
Conocer: información del objeto Hacer: acciones con otros objetos
![Page 19: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/19.jpg)
Es la abreviación del grupo Gang of Four, compuesto por Erich Gamma, Richard Helm, Ralph Jhonson y John Vlisides, quienes en su publicación “Design Patterns” describen 23 patrones de diseño comúnmente utilizados y de gran aplicabilidad en problemas de diseño usando modelamiento UML.
![Page 20: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/20.jpg)
Documentar la experiencia en el diseño, en forma de un catálogo de patrones.
Categorías de patrones: ◦ De creación: implica el proceso de instanciar
objetos. ◦ Estructurales: composición de objetos. ◦ De comportamiento: cómo se comunican los
objetos, cooperan y distribuyen las responsabilidades para lograr sus objetivos.
![Page 21: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/21.jpg)
![Page 22: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/22.jpg)
Los patrones UML son colaboraciones parametrizadas, esto es, son un grupo de clases/objetos colaborando entre sí que se pueden abstraer de un conjunto de escenarios general. Antes de comenzar a usar un patrón primero debe ser creado como un diagrama estándar de UML o existir como tal en algún repositorio
![Page 23: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/23.jpg)
Permite a una clase usar datos y servicios provistos por otras clases independientes proveyendo un acceso uniforme.
![Page 24: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/24.jpg)
![Page 25: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/25.jpg)
![Page 26: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/26.jpg)
![Page 27: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/27.jpg)
1. Instancia única (Singleton) : Asegure que una clase sólo tiene una instancia , y proporcionarle un punto global de acceso a dicha instancia
2. Método fabricación(Factory Method) : Define un interfaz para crear un objeto, pero dejar a subclases decidir sus instancias . El Método De la fábrica deja a una clase la creación de ejemplares o copias a subclases.
3. Fabrica abstracta (Abstract Factory) : Proporciona un interfaz para crear las familias de objetos relacionados o dependientes sin especificar sus clases concretas.
4. Constructor (Builder): Separa la construcción de un objeto complejo de su representación , de modo que el mismo proceso de construcción pueda crear representaciones diferentes.
5. Prototipo(Prototype) : Crea nuevos objetos creándolos de una instancia ya existente.
![Page 28: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/28.jpg)
6. Adaptador (adapter) :Convierte la interfaz de una clase en otra interfaz que otra clase puede usar . debido a que la interfaces es incompatibles con dicha clase
7. Puente ( bridge) :Desacopla una abstracción de su implementación de modo que los dos puedan variar por separado.
8. Peso ligero (Flyweight ) :Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.
9. Fachada (Facade) : Proporciona un interfaz unificada a un juego de interfaces en un subsistema. La fachada define un interfaz de nivel más alto que hace el subsistema fácil de usar.
10. Envoltorio (Decorator) :Adjunta responsabilidades adicionales a un objeto dinámicamente. Los decoradores proporcionan una alternativa flexible a la subclasificación para ampliar la funcionalidad.
11. Objeto compuesto (Composite) :El objeto compuesto permite tratar a jerarquías de objetos en individuales y composiciones de objetos uniformemente como si se tratase de objetos simples
12. Proxy : Mantiene un representante de un objeto
![Page 29: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/29.jpg)
13. Cadena responsabilidad (Chain of Responsibility ): Encadena los objetos de encubrimiento y pasa la petición a lo largo de la cadena hasta que un objeto la maneja. Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.
14. Orden (Command) : Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma.
15. Intérprete (Interpreter) :Considerando un lenguaje , define un representación para su gramática con un intérprete que usa la representación para interpretar sentencias en el mismo lenguaje.
16. Iterador (Iterator) :Proporciona un modo de tener acceso a los elementos de un objeto agregado secuencialmente sin exponer su representación subyacente.
17. Mediador (Mediator) :Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.
18. Recuerdo (Memento) : Sin violar encapsulación, captura y externaliza el estado interno de un objeto de modo que el objeto pueda ser restaurado a este estado más tarde.
![Page 30: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/30.jpg)
19. Observador (Observer) : Define de uno a varios la dependencia entre objetos de modo que cuando se produce un cambio de estado del objeto, todos sus dependientes sean notificados y puestos al día automáticamente.
20. Estado (State) :Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno
21. estrategia (Strategy) : Define una familia de algoritmos (métodos), encapsula cada uno, y los hace permutables. La estrategia deja al algoritmo (método) variar por separado de los clientes (objetos) que lo usan o invocan .
22. método plantilla ( template method) :Define el esqueleto de un algoritmo en una operación, aplazando algunos pasos a subclases. El Método de Plantilla deja a subclases redefinir los ciertos pasos de un algoritmo sin cambiar la estructura del algoritmo.
23. Visitante (Visitor) :Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.
![Page 31: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/31.jpg)
Singleton Factory Method
Abstract Factory Builder
Prototype
![Page 32: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/32.jpg)
Abstraen el proceso de creación de instancias.
Ayudan a hacer a un sistema independiente de cómo se crean, se componen y se representan sus objetos.
Un patrón de creación de clases usa la herencia para cambiar la clase de la instancia crear.
Un patrón de creación de objetos delega la creación de la instancia en otro objeto.
![Page 33: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/33.jpg)
Objetivo: ◦ Garantiza que una clase sólo tenga una instancia, y
proporciona un punto de acceso global a ella Nombres: ◦ Único
Ejemplo: ◦ Una única cola de impresión para múltiples
impresoras
![Page 34: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/34.jpg)
![Page 35: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/35.jpg)
Cuando deba haber una única instancia de una clase
![Page 36: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/36.jpg)
Acceso controlado a la única instancia Espacio de nombre reducido Más flexible que las operaciones de clase
![Page 37: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/37.jpg)
![Page 38: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/38.jpg)
![Page 39: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/39.jpg)
![Page 40: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/40.jpg)
Objetivo: ◦ Define una interfaz para crear un objeto, pero deja
que sean las subclases quienes decidan qué clase instanciar
Nombres: ◦ Virtual Constructor, Método de Fabricación
Ejemplo: ◦ Conexiones múltiples
![Page 41: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/41.jpg)
Una clase no puede prever la clase de objetos que debe crear
Una clase quiere que sean sus subclases quienes especifiquen los objetos que ésta crea
Las clases delegan la responsabilidad en una de entre varias clases auxiliares
![Page 42: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/42.jpg)
Creador
MetodoDeFabricacion() UnaOperacion()
ProductoConcretoA CreadorConcreto
MetodoDeFabricacion()
<<creates>>
... producto = MetodoDeFabricacion() ...
return new ProductoConcreto
<<Abstract>> Producto
ProductoConcretoB
![Page 43: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/43.jpg)
Contabilidad
MetodoDeFabricacion() UnaOperacion()
SqlConexion Fabrica
creaConexion()
<<creates>>
... miConexion= miFab.creaConexion() ...
return new OracleConexion
<<Abstract>> Conexion
OracleConexion
![Page 44: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/44.jpg)
Conexion conx = new OracleConexion() Conexion conx = new SQLConexion() Conexion conx = new MySqlConexion() Conexion conx = new PostgreSqlConexion()
![Page 45: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/45.jpg)
Fabrica
Oracle Sql
Server
MySql PostgreSql
Conexion
![Page 46: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/46.jpg)
OracleConexion
<<Abstract>> Conexion
SqlConexion
![Page 47: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/47.jpg)
![Page 48: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/48.jpg)
![Page 49: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/49.jpg)
![Page 50: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/50.jpg)
Fabrica
creaConexion()
<<creates>>
OracleConexion
![Page 51: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/51.jpg)
![Page 52: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/52.jpg)
![Page 53: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/53.jpg)
Objetivo: ◦ Proporciona una Interfaz para crear familias de objetos
relacionados sin especificar clases concretas Nombres: ◦ Kit, Fábrica Abstracta
Ejemplo: ◦ Toolkit de interfaces de usuario en Windows, Linux, Mac
![Page 54: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/54.jpg)
IFabricaAbstracta
CrearProductoA() CrearProductoB()
<<Interface>>
Cliente
FabricaConcreta1
CrearProductoA() CrearProductoB()
IProductoA
FabricaConcreta2
CrearProductoA() CrearProductoB()
ProductoA1 ProductoA2
IProductoB
ProductoB1 ProductoB2
<<creates>>
<<creates>>
<<creates>>
![Page 55: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/55.jpg)
![Page 56: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/56.jpg)
FabricaAbstracta
creaConexion() : Conexion
<<Interface>>
Pagos
Conexion
FabricaHeredada
CrearConexion()
SqlConexion OracleConexion <<creates>>
![Page 57: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/57.jpg)
FabricaAbstracta
creaConexion() : Conexion
<<Interface>>
FabricaHeredada
CrearConexion()
![Page 58: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/58.jpg)
![Page 59: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/59.jpg)
Conexion
SqlConexion OracleConexion
![Page 60: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/60.jpg)
![Page 61: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/61.jpg)
![Page 62: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/62.jpg)
![Page 63: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/63.jpg)
Objetivo: ◦ Permitir que el código cliente controle el proceso de
construcción de los objetos. ◦ Separar la construcción de un objeto de su
representación, de manera que el mismo procesos de construcción pueda crear diferentes representaciones
Nombres: ◦ Constructor
Ejemplo: ◦ Robot constructor de hamburguesas
![Page 64: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/64.jpg)
El algoritmo para crear un objeto complejo debiera ser independiente de las partes de que se compone dicho objeto y de cómo se ensamblan
El proceso de construcción debe permitir diferentes representaciones del objeto que está siendo construido
![Page 65: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/65.jpg)
Permite variar la representación interna de un producto
Aísla el código de construcción y representación
Proporciona un control más fino sobre el proceso de construcción
![Page 66: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/66.jpg)
Producto ConstructorConcreto
ConstruirParte() ObtenerResultado()
Cliente (from Logical View)
Director
Construir()
-constructor
<<creates>>
para todos los objetos { constructor->ConstruirParte() }
Constructor
ConstruirParte()
![Page 67: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/67.jpg)
RobotHamburguesa
trabajar() cargaAcciones()
Cliente (from Logical View)
Builder
Construir()
-constructor
<<creates>>
para todos los objetos { robot->cargaAcciones () }
<<interface>> Robot
trabajar() cargaAcciones()
RobotHotDog
trabajar() cargaAcciones()
ProductoHam ProductoHot
![Page 68: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/68.jpg)
![Page 69: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/69.jpg)
![Page 70: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/70.jpg)
RobotHamburguesa
trabajar() cargaAcciones()
<<interface>> Robot
trabajar() cargaAcciones()
RobotHotDog
trabajar() cargaAcciones()
![Page 71: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/71.jpg)
RobotHamburguesa
trabajar() cargaAcciones()
![Page 72: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/72.jpg)
![Page 73: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/73.jpg)
RobotHotDog
cargaAcciones()
![Page 74: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/74.jpg)
![Page 75: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/75.jpg)
Builder
Construir()
-constructor <<interface>>
Robot
trabajar() cargaAcciones()
![Page 76: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/76.jpg)
![Page 77: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/77.jpg)
![Page 78: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/78.jpg)
![Page 79: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/79.jpg)
Objetivo: ◦ Crear nuevos objetos copiando una instancia
prototípica Nombres: ◦ Prototipo
Ejemplo: ◦ Editor de partituras musicales
![Page 80: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/80.jpg)
Cuando las clases a instanciar sean especificadas en tiempo de ejecución
Para evitar jerarquías de clases de fábricas con jerarquía de clases de productos
Cuando las instancias de clases puedan tener un estado de entre un conjunto reducido
![Page 81: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/81.jpg)
Añadir y eliminar productos en tiempo de ejecución
Especificar nuevos objetos modificando valores
Especificar nuevos objetos variando la estructura
Reduce la herencia Configurar dinámicamente una aplicación con
clases
![Page 82: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/82.jpg)
Prototype
Clonar() : Prototype
Cliente prototipo
1 1
PrototipoConcreto1
Clonar() : Prototype
p = prototipo->Clonar() PrototipoConcreto2
Clonar() : Prototype
devuelven una copia a sí mismos
devuelven una copia a sí mismos
![Page 83: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/83.jpg)
Figura
Clonar() : Figura
PruebaFiguras prototipo
1 1
Circulo
Clonar() : Figura
p = circulo.Clonar() Cuadrado
Clonar() : Figura
devuelven una copia a sí mismos
devuelven una copia a sí mismos
![Page 84: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/84.jpg)
![Page 85: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/85.jpg)
![Page 86: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/86.jpg)
![Page 87: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/87.jpg)
![Page 88: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/88.jpg)
![Page 89: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/89.jpg)
![Page 90: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/90.jpg)
![Page 91: 8 Patrones de Diseño - Creacion.pdf](https://reader034.vdocumento.com/reader034/viewer/2022050910/55cf9259550346f57b95b679/html5/thumbnails/91.jpg)