Documente Academic
Documente Profesional
Documente Cultură
Integrantes:
Aguilar Rodríguez, Wilmer
Flores Quezada, Oliver
Paredes Ventura, Deivy
Saldaña de la Cruz, Jorge
Vaca Pastor, Arnold
Vargas Zavaleta, Erick
Curso:
Simulación de Sistemas
Docente:
Ing. Camilo Suarez
Titulo:
Trabajo de Investigación – Patrones de Diseño
Ciclo:
VIII
UNIVERSIDAD NACIONAL DE TRUJILLO
PATRONES DE DISEÑO
INDICE
Contenido
1. Patrones tipo creacionales .................................................................................................. 3
1.1. Patrón Singleton .......................................................................................................... 3
1.2. Patrón Factory ............................................................................................................. 3
1.2.1. Patrón Simple Factory ......................................................................................... 4
1.2.2. Patrón Factory Method ....................................................................................... 5
1.2.3. Patrón Abstract Factory ...................................................................................... 5
1.3. Patrón Builder .............................................................................................................. 5
1.4. Patrón Prototype ......................................................................................................... 6
1.5. Patrón Object Pool ....................................................................................................... 7
2. Patrones tipo comportacionales......................................................................................... 8
2.1 Patrón Chain of Responsability .................................................................................. 8
2.2 Patrón Command ....................................................................................................... 10
2.3 Patrón Iterator ........................................................................................................... 11
2.4 Patrón Iterator ...............................................................Error! Bookmark not defined.
2.5 Patrón Observer......................................................................................................... 13
2.6 Patrón Mediator ......................................................................................................... 14
2.7 Patrón Memento ........................................................................................................ 15
2.8 Patrón State ................................................................................................................ 16
2.9 Patrón Strategy .......................................................................................................... 16
2.10 Patrón Template Method .......................................................................................... 17
2.11 Patrón Null Object ..................................................................................................... 17
2.12 Patrón Visitor ............................................................................................................. 17
3. Patrones tipo estructurales............................................................................................... 18
3.1 Patrón Adapter........................................................................................................... 18
3.2 Patrón Proxy .............................................................................................................. 18
3.3 Patrón Decorator ....................................................................................................... 19
3.4 Patrón Bridge ............................................................................................................. 20
3.5 Patrón Composite ...................................................................................................... 21
3.6 Patrón Facade ............................................................................................................ 22
3.7 Patrón Flyweight ....................................................................................................... 23
PATRONES DE DISEÑO
1. Patrones tipo creacionales
1.1.Patrón Singleton
A) Definición
Es un patrón de diseño que permite restringir la creación de objetos pertenecientes a una
clase o el valor de un tipo a un único objeto.
Su intención consiste en garantizar que una clase solo tenga una instancia y proporcionar
un punto de acceso global a ella.
El patrón singleton se implementa creando en nuestra clase un método que crea una
instancia del objeto solo si todavía no existe alguna. Para asegurar que la clase no puede ser
instanciada nuevamente se regula el alcance del constructor (con modificadores de acceso
como protegido o privado).
La instrumentación del patrón puede ser delicada en programas con múltiples hilos de
ejecución. Si dos hilos de ejecución intentan crear la instancia al mismo tiempo y esta no
existe todavía, solo uno de ellos debe lograr crear el objeto. La solución clásica para este
problema es utilizar exclusión mutua en el método de creación de la clase que implementa
el patrón.
El patrón singleton provee una única instancia global gracias a que:
C) Situaciones de uso
Las situaciones más habituales de aplicación de este patrón son aquellas en las que dicha
clase controla el acceso a un recurso físico único (como puede ser el ratón o un archivo
abierto en modo exclusivo) o cuando cierto tipo de datos debe estar disponible para todos
los demás objetos de la aplicación.
1.2.Patrón Factory
A) Definición
En diseño de software, el patrón de diseño Factory Method consiste en utilizar una clase
constructora (al estilo del Abstract Factory) abstracta con unos cuantos métodos definidos
y otro(s) abstracto(s): el dedicado a la construcción de objetos de un subtipo de un tipo
determinado. Es una simplificación del Abstract Factory, en la que la clase abstracta tiene
métodos concretos que usan algunos de los abstractos; según usemos una u otra hija de esta
clase abstracta, tendremos uno u otro comportamiento.
B) Esquema UML
C) Situaciones de uso
Supongamos que tiene dos tipos diferentes de televisores: uno con pantalla LED y otro con
pantalla LCD. Si alguno de estos comienza a funcionar mal, llamará a un técnico de TV para
solicitar una visita a su residencia. El reparador debe preguntar primero qué tipo de
televisor no funciona. Según su aporte, llevará la información requerida instrumentos con
él.
provocativo usar Simple factory para requisitos empresariales, pero puede suceder que vea
el problema en un ámbito pequeño, pero en un ámbito más amplio su decisión perjudica el
diseño, lea el a continuación para ver cómo un simple cambio en los requisitos comerciales
puede dañar el diseño.
1.3.Patrón Builder
A) Definición
Como Patrón de diseño, el patrón builder (Constructor) es usado para permitir la creación
de una variedad de objetos complejos desde un objeto fuente (Producto), el objeto fuente
se compone de una variedad de partes que contribuyen individualmente a la creación de
cada objeto complejo a través de un conjunto de llamadas a interfaces comunes de la clase
Abstract Builder.
El patrón builder es creacional.
A menudo, el patrón builder construye el patrón Composite, un patrón estructural.
Intención: Abstrae el proceso de creación de un objeto complejo, centralizando dicho
proceso en un único punto, de tal forma que el mismo proceso de construcción pueda crear
representaciones diferentes.
B) Esquema UML
C) Situaciones de uso
Para crear una computadora, se ensamblan diferentes partes dependiendo del pedido
recibido por el cliente
(por ejemplo, un cliente puede exigir un disco duro de 500 GB con un procesador Intel; otro
cliente puede elegir un 250
GB de disco duro con un procesador AMD).
A veces necesitamos convertir un formato de texto a otro formato de texto (por ejemplo,
RTF a texto ASCII).
1.4.Patrón Prototype
A) Definición
El patrón prototipo proporciona un método alternativo para crear instancias de nuevos
objetos copiando o clonando
una instancia de una existente. La creación de una nueva instancia, en un escenario del
mundo real, normalmente se trata como un
Operación costosa. Este patrón nos ayuda a lidiar con este problema. Nuestro enfoque aquí
es reducir el gasto de
Este proceso de creación de una nueva instancia.
B) Esquema UML
C) Situaciones de uso
Supongamos que tenemos una copia maestra de un documento valioso. Queremos hacer
algún cambio para obtener una sensación diferente. Podemos hacer una fotocopia de este
documento y luego tratar de editar nuestros cambios.
Supongamos que hemos hecho una solicitud. La próxima vez que queremos crear una
aplicación similar con algunos pequeños cambios, debemos comenzar con una copia de
nuestra aplicación de copia maestra y realizar los cambios. No vamos a comenzar desde
cero.
B) Esquema UML
C) Situaciones de Uso
Mediante la implementación del patrón de diseño Object Pool
desarrollaremos una aplicación multi hilos que controlará muchos
procesos de forma simultánea. Dichos procesos estarán controlados
por un Object Pool que limitará el número de proceso que pueden ser
ejecutados a la vez, con la finalidad de no agotar los recursos del
servidor y procesar de forma simultanea el número adecuado de
proceso que no afecten el rendimiento, dejando el resto de procesos
en una cola de espera que serán procesados una vez que llegue su
turno.
C) Situaciones de uso
Se utiliza cuando:
Las peticiones emitidas por un objeto deben ser atendidas
por distintos objetos receptores.
No se sabe a priori cual es el objeto que me puede resolver el
problema.
Cuando un pedido debe ser manejado por varios objetos.
El conjunto de objetos que pueden tratar una petición debería
ser especificado dinámicamente.
B) Esquema UML
C) Situaciones de uso
Se necesiten colas o registros de mensajes.
Se deba tener la posibilidad de deshacer las operaciones
realizadas.
Se necesite uniformidad al invocar las acciones.
Se quiera facilitar la parametrización de las acciones a
realizar.
B) Esquema UML
C) Situaciones de uso
A) Definición
En este patrón, hay muchos observadores (objetos) que observan un sujeto
particular (objeto).
Los observadores están básicamente interesados y quieren que se les notifique
cuando se realice un cambio dentro de ese tema.
Entonces, se registran en ese tema. Cuando pierden interés en el tema,
simplemente anulan el registro.
del sujeto. A veces, este modelo también se conoce como el modelo de editor-
suscriptor.
B) Esquema UML
C) Situaciones de uso
Este patrón tiene un uso muy concreto: varios objetos necesitan ser notificados
de un evento y cada uno de ellos deciden cómo reaccionar cuando este evento
se produzca.
Un caso típico es la Bolsa de Comercio, donde se trabaja con las acciones de las
empresas. Imaginemos que muchas empresas están monitoreando las acciones
una empresa X. Posiblemente si estas acciones bajan, algunas personas estén
interesadas en vender acciones, otras en comprar, otras quizás no hagan nada y
la empresa X quizás tome alguna decisión por su cuenta. Todos reaccionan
distinto ante el mismo evento. Esta es la idea de este patrón y son estos casos
donde debe ser utilizado.
A) Definición
Un mediador es quien asume la responsabilidad de la comunicación entre un
grupo de objetos. los
El mediador actúa como un intermediario que puede rastrear la comunicación
entre dos objetos. Los otros objetos
en el sistema también son conscientes de este mediador y saben que si necesitan
comunicarse entre
ellos mismos, necesitan pasar por el mediador. La ventaja de utilizar dicho
mediador es que podemos
reducir las interconexiones directas entre los objetos y, por lo tanto, disminuir
el acoplamiento.
B) Esquema UML
C) Situaciones de uso
Cuando un conjunto grande de objetos se comunica de una forma bien definida,
pero compleja.
Cuando se reutilizar un objeto se hace difícil porque se relaciona con muchos
objetos.
Cuando las clases son difíciles de reutilizar porque su función básica esta
entrelazada con relaciones de dependencia.
A) Definición
Este patrón de diseño permite capturar y exportar el estado interno de un objeto
para que luego se pueda restaurar, sin romper la encapsulación.
Su finalidad es almacenar el estado de un objeto (o del sistema completo) en un
momento dado, de manera que se pueda restaurar posteriormente si fuese
necesario. Para ello se mantiene almacenado el estado del objeto para un
instante de tiempo en una clase independiente de aquella a la que pertenece el
objeto (pero sin romper la encapsulación), de forma que ese recuerdo permita
que el objeto sea modificado y pueda volver a su estado anterior.
B) Esquema UML
C) Situaciones de uso
Este patrón debe ser utilizado cuando se necesite salvar el estado de un objeto
y tener disponible los distintos estados históricos que se necesiten. Por ello
mismo, este patrón es muy intuitivo para darse cuando debe ser utilizado.
Hoy en día una gran variedad de aplicaciones posee las opciones de "deshacer"
y "rehacer". Por ejemplo, las herramientas de Microsoft Office como Word,
Power Point, etc. Es imposible pensar que ciertas herramientas no tengan esta
opción, como el Photoshop. También IDEs de programación como Eclipse
utilizan una opción de historial local. Una solución para este problema es el
patrón Memento.
A) Definición
B) Esquema UML
C) Situaciones de uso
B) Esquema UML
C) Situaciones de uso
El patrón visitante es aplicable, por ejemplo, cuando varias clases de objetos
con interfaces diferentes y se desean realizar operaciones que dependen de
sus clases concretas. También cuando se necesitan diversas operaciones
sobre objetos de una jerarquía y no se desea recargar las clases con estas
operaciones.
Es de mucha utilidad cuando las clases de la jerarquía no cambian, pero se
añaden con frecuencia operaciones a la estructura.
Si la jerarquía cambia no es aplicable, ya que cada vez que agrega nuevas
clases que deben ser visitadas, hay que añadir una operación “visita”
abstracta a la clase abstracta del visitante, y debe agregar una aplicación de
dicha categoría a cada Visitante concreto que se haya escrito.
3. Patrones tipo estructurales
3.1 Patrón Adapter
A) Definición
El patrón adaptador se utiliza para transformar una interfaz en otra, de tal
modo que una clase que no pueda utilizar la primera haga uso de ella a
través de la segunda.
B) Esquema UML
C) Situaciones de uso
Es recomendable utilizar el patrón adaptador cuando:
- Se desea usar una clase existente, y su interfaz no sea igual a la
necesitada.
- Cuando se desea crear una clase reutilizable que coopere con clases
no relacionadas. Es decir, que las clases no tienen necesariamente
interfaces compatibe
B) Esquema UML
C) Situaciones de uso
B) Esquema UML
C) Situaciones de uso
- Añadir responsabilidades a objetos individuales de forma dinámica y
transparente
- Responsabilidades de un objeto pueden ser retiradas
- Cuando la extensión mediante la herencia no es viable
- Hay una necesidad de extender la funcionalidad de una clase, pero no
hay razones para extenderlo a través de la herencia.
- Existe la necesidad de extender dinámicamente la funcionalidad de un
objeto y quizás quitar la funcionalidad extendida.
B) Esquema UML
C) Situaciones de uso
- El patrón es extremadamente útil cuando nuestra clase y sus
funcionalidades asociadas pueden cambiar a intervalos frecuentes.
- Aquí eliminamos el enlace concreto entre una abstracción y la
implementación correspondiente. Como resultado, ambas jerarquías
(abstracción y sus implementaciones) pueden extenderse a través de
clases secundarias.
- Ambas jerarquías pueden crecer de forma independiente. Aquí, si
hacemos algún cambio en los métodos de abstracción, no tienen un
impacto en el método del implementador (es decir, fillWithColor ()).
B) Esquema UML
C) Situaciones de uso
- El patrón es ideal para representar la jerarquía de parte y todo entre
los objetos.
- Aquí el cliente puede tratar la composición de los objetos como un solo
objeto.
- Los clientes pueden agregar nuevos tipos de componentes fácilmente.
- Si nos vemos obligados a mantener el orden de los niños (por ejemplo,
analizar árboles como componentes), debemos tener especial cuidado
para mantener ese orden.
B) Esquema UML
C) Situaciones de uso
- Utilizamos el patrón Facade para representar una interfaz simple en
lugar de un subsistema complejo.
- Aquí promovemos un acoplamiento débil entre los subsistemas, por lo
que, de esta manera, los estamos haciendo portátiles.
- Ya mencionamos que separamos los subsistemas de los clientes
mediante una interfaz simple. Con este modelo, no solo hacemos que el
sistema sea más fácil de usar, sino que también reducimos la cantidad
de objetos con los que los clientes deben lidiar.
- Realmente no hay ninguna desventaja importante asociada con este
patrón. Por otro lado, también ha demostrado su utilidad en bibliotecas
como jQuery.
B) Esquema UML
C) Situaciones de uso
- La minimización del almacenamiento es una de las principales
preocupaciones aquí. Si podemos tener más pesos mosca para
compartir, podemos ahorrar más memoria.
- Si podemos calcular estados extrínsecos en lugar de almacenarlos,
podemos ahorrar una cantidad significativa de memoria.
- A veces, en una estructura de árbol, para compartir nodos de hoja,
combinamos este patrón con un patrón compuesto.
- Una interfaz flyweight puede o no permitir compartir. En algunos
casos, podemos tener objetos de peso mosca no compartidos, que a su
vez pueden tener objetos de peso mosca concretos de niños.
- En términos simples: los datos intrínsecos hacen que la instancia sea
única, mientras que los datos extrínsecos se pasan como argumentos.