Categoria Gof
Categoria Gof
Categoria Gof
NOMBRE DEL
PATRON TIPO DE PATRON CARACTERISTICAS APLICACIONES PRINCIPALES
Nos permite la creación de un subtipo determinado por medio de una clase de • Utiliza el Factory Method cuando no conozcas de antemano las
Factoría, la cual oculta los detalles de creación del objeto, con la finalidad de dependencias y los tipos exactos de los objetos con los que deba
que estos pueden variar sin afectar la forma en que el cliente interactúa con funcionar tu código.
ellos. permite escribir aplicaciones que son más flexibles respecto de los tipos • Utiliza el Factory Method cuando quieras ofrecer a los usuarios de tu
FACTORY
DE CREACION a utilizar difiriendo la creación de las instancias en el sistema a subclases que biblioteca o framework, una forma de extender sus componentes
METHOD
pueden ser extendidas a medida que evoluciona el sistema. Permite también internos.
encapsular el conocimiento referente a la creación de objetos. • Utiliza el Factory Method cuando quieras ahorrar recursos del sistema
mediante la reutilización de objetos existentes en lugar de
reconstruirlos cada vez.
Nos permite crear, mediante una interfaz, conjuntos o familias de objetos • Utiliza el patrón Abstract Factory cuando tu código deba funcionar con
(denominados productos) que dependen mutuamente y todo esto sin varias familias de productos relacionados, pero no desees que dependa
especificar cuál es el objeto concreto. Este patrón se puede aplicar cuando: de las clases concretas de esos productos, ya que puede ser que no los
ABSTRACT
DE CREACION Un sistema debe ser independiente de cómo sus objetos son creados. conozcas de antemano o sencillamente quieras permitir una futura
FACTORY
Un sistema debe ser ‘configurado’ con una cierta familia de productos. extensibilidad.
Se necesita reforzar la noción de dependencia mutua entre ciertos objetos.
Es un patrón que permite construir objetos complejos paso a paso. Al contrario • Utiliza el patrón Builder para evitar un “constructor telescópico”.
que otros patrones creacionales, Builder no necesita que los productos tengan • Utiliza el patrón Builder cuando quieras que el código sea capaz de crear
una interfaz común. Esto hace posible crear distintos productos utilizando el distintas representaciones de ciertos productos (por ejemplo, casas de
BUILDER DE CREACION mismo proceso de construcción. El patrón Builder es muy conocido en el piedra y madera).
mundo de Java. Resulta especialmente útil cuando debes crear un objeto con • Utiliza el patrón Builder para construir árboles con el patrón Composite
muchas opciones posibles de configuración. u otros objetos complejos.
• Este patrón es aplicable en sistemas en los que se desea poder
garantizar que solo existe una instancia de una clase.
El propósito de este patrón es evitar que sea creado más de un objeto por clase.
Esto se logra creando el objeto deseado en una clase y recuperándolo como una
instancia estática. El singleton es uno de los patrones más simples, pero más
poderosos en el desarrollo de software. Si se utiliza el patrón singleton para
crear una instancia de una clase, entonces el patrón se asegura de que
realmente sólo permanezca con esta instancia única. El singleton hace que esta
SINGLETON DE CREACION clase de software sea accesible globalmente. En los diferentes lenguajes de
programación, hay diferentes métodos para lograrlo. Para asegurarse de que
permanezca con una sola instancia única, se debe impedir que los usuarios
creen nuevas instancias. Esto se logra mediante el constructor, declarando el
patrón como “privado”. Esto significa que sólo el código en el singleton puede
instanciar el singleton en sí mismo. Por lo tanto, esto garantiza que sólo un
mismo objeto puede llegar al usuario. Si esta instancia ya existe, no se crea
ninguna nueva instancia.
El patrón Decorator responde a la necesidad de añadir dinámicamente • Utiliza el patrón Decorator cuando necesites asignar funcionalidades
funcionalidad a un Objeto. Esto nos permite no tener que crear sucesivas clases adicionales a objetos durante el tiempo de ejecución sin descomponer el
que hereden de la primera incorporando la nueva funcionalidad, sino otras que código que utiliza esos objetos.
la implementan y se asocian a la primera. • Utiliza el patrón cuando resulte extraño o no sea posible extender el
DECORATOR ESTRUCTURALES comportamiento de un objeto utilizando la herencia
El patrón Facade (fachada) tiene la característica de ocultar la complejidad de Se aplicará el patrón fachada cuando se necesite proporcionar una interfaz
interactuar con un conjunto de subsistemas proporcionando una interface de simple para un subsistema complejo, o cuando se quiera estructurar varios
alto nivel, la cual se encarga de realizar la comunicación con todos los subsistemas en capas, ya que las fachadas serían el punto de entrada a cada
subsistemas necesarios. La fachada es una buena estrategia cuando nivel. Otro escenario proclive para su aplicación surge de la necesidad de
FACADE ESTRUCTURALES requerimos interactuar con varios subsistemas para realizar una operación desacoplar un sistema de sus clientes y de otros subsistemas, haciéndolo más
concreta ya que se necesita tener el conocimiento técnico y funcional para independiente, portable y reutilizable (esto es, reduciendo dependencias entre
saber qué operaciones de cada subsistema tenemos que ejecutar y en qué los subsistemas y los clientes).
orden, lo que puede resultar muy complicado cuando los sistemas empiezan a
crecer demasiado.
Define una interfaz que declara los métodos necesarios para acceder El patrón iterator permite el acceso al contenido de una estructura sin exponer
secuencialmente a un grupo de objetos de una colección. Algunos de los su representación interna. Además, diferentes iteradores pueden presentar
métodos que podemos definir en la interfaz Iterador son: Primero (), Siguiente diferentes tipos de recorrido sobre la estructura (recorrido de principio a fin,
DE (), Hay Mas () y Elemento Actual (). Este patrón de diseño permite recorrer una recorrido con saltos...). Por otro lado, los iteradores no tienen por qué limitarse
ITERATOR
COMPORTAMIENTO estructura de datos sin que sea necesario conocer la estructura interna de la a recorrer la estructura, sino que podrían incorporar otro tipo de lógica (por
misma. ejemplo, filtrado de elementos). Es más, dados diferentes tipos de estructuras,
el patrón iterador permite recorrerlas todas utilizando una interfaz común
uniforme.
Define una dependencia del tipo uno a muchos entre objetos, de manera que Puede pensarse en aplicar este patrón cuando una modificación en el estado de
cuando uno de los objetos cambia su estado, notifica este cambio a todos los un objeto requiere cambios de otros, y no se desea que se conozca el número de
dependientes. Se trata de un patrón de comportamiento (existen de tres objetos que deben ser cambiados. También cuando se quiere que un objeto sea
DE tipos: creación, estructurales y de comportamiento), por lo que está capaz de notificar a otros objetos sin hacer ninguna suposición acerca de los
OBSERVER
COMPORTAMIENTO relacionado con algoritmos de funcionamiento y asignación objetos notificados y cuando una abstracción tiene dos aspectos diferentes, que
de responsabilidades a clases y objetos. dependen uno del otro; si se encapsulan estos aspectos en objetos separados se
permitirá su variación y reutilización de modo independiente.
Es un patrón de diseño para el desarrollo de software. Se clasifica como Cualquier programa que ofrezca un servicio o función determinada, que pueda
patrón de comportamiento porque determina cómo se debe realizar el ser realizada de varias maneras, es candidato a utilizar el patrón estrategia.
intercambio de mensajes entre diferentes objetos para resolver una tarea. El Puede haber cualquier número de estrategias y cualquiera de ellas podrá ser
patrón estrategia permite mantener un conjunto de algoritmos de entre los intercambiada por otra en cualquier momento, incluso en tiempo de ejecución.
cuales el objeto cliente puede elegir aquel que le conviene e intercambiarlo Si muchas clases relacionadas se diferencian únicamente por su
dinámicamente según sus necesidades. comportamiento, se crea una superclase que almacene el comportamiento
DE común y que hará de interfaz hacia las clases concretas. Si un algoritmo utiliza
STRATEGY información que no deberían conocer los clientes, la utilización del patrón
COMPORTAMIENTO
estrategia evita la exposición de dichas estructuras. Aplicando el patrón a una
clase que defina múltiples comportamientos mediante instrucciones
condicionales, se evita emplear estas instrucciones, moviendo el código a clases
independientes donde se almacenará cada estrategia. Efectivamente, como se
comenta anteriormente, este patrón de diseño nos sirve para intercambiar un
sin número de estrategias posibles.
Es un patrón de diseño que define una estructura algorítmica en la súper • El patrón Template Method te permite convertir un algoritmo
clase, delegando la implementación a las subclases. Es decir, define una serie monolítico en una serie de pasos individuales que se pueden extender
de pasos, en donde los pasos serán redefinidos en las subclases. Permite que fácilmente con subclases, manteniendo intacta la estructura definida en
TEMPLATE DE las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura. una superclase.
METHOD COMPORTAMIENTO • Cuando conviertes un algoritmo así en un método plantilla, también
puedes elevar los pasos con implementaciones similares a una
superclase, eliminando la duplicación del código. El código que varía
entre subclases puede permanecer en las subclases.