Está en la página 1de 7

Paradigmas de Programación

Patrones de diseño

Lección 2
Unidad I
Paradigmas de Programación – Unidad I

Contenido
PATRONES DE DISEÑO ........................................................................................................................ 2
¿QUÉ ES EL PATRÓN? .................................................................................................................... 2
LISTA DE PATRONES SEGÚN EL DISEÑO ........................................................................................... 2
PATRONES CREACIONALES ............................................................................................................. 3
PATRONES ESTRUCTURALES........................................................................................................... 3
PATRONES DE COMPORTAMIENTO ................................................................................................... 4
REFERENCIAS BIBLIOGRÁFICAS ........................................................................................................... 6

Material Básico pág. 1


Paradigmas de Programación – Unidad I

Patrones de Diseño
Los patrones de diseño son soluciones habituales a problemas que ocurren con frecuencia
en el diseño de software. Son como planos prefabricados que se pueden personalizar para
resolver un problema de diseño recurrente en tu código.

No se puede elegir un patrón y copiarlo en el programa como si se tratara de funciones o


bibliotecas ya preparadas. El patrón no es una porción específica de código, sino un concepto
general para resolver un problema particular. Puedes seguir los detalles del patrón e
implementar una solución que encaje con las realidades de tu propio programa.

A menudo los patrones se confunden con algoritmos porque ambos conceptos describen
soluciones típicas a problemas conocidos. Mientras que un algoritmo siempre define un grupo
claro de acciones para lograr un objetivo, un patrón es una descripción de más alto nivel de
una solución. El código del mismo patrón aplicado a dos programas distintos puede ser
diferente.

Una analogía de un algoritmo sería una receta de cocina: ambos cuentan con pasos claros
para alcanzar una meta. Por su parte, un patrón es más similar a un plano, ya que puedes
observar cómo son su resultado y sus funciones, pero el orden exacto de la implementación
depende de ti.

¿Qué es el Patrón?
La mayoría de los patrones se describe con mucha formalidad para que la gente pueda
reproducirlos en muchos contextos. Aquí tienes las secciones que suelen estar presentes en
la descripción de un patrón:

- El propósito del patrón explica brevemente el problema y la solución.


- La motivación explica en más detalle el problema y la solución que brinda el patrón.
- La estructura de las clases muestra cada una de las partes del patrón y el modo en
que se relacionan.
- El ejemplo de código en uno de los lenguajes de programación populares facilita la
asimilación de la idea que se esconde tras el patrón.

Algunos catálogos de patrones enumeran otros detalles útiles, como la aplicabilidad del
patrón, los pasos de implementación y las relaciones con otros patrones.

Lista de Patrones según el Diseño


Normalmente, en programación nos encontramos muchas veces con problemas que tienen
características similares. Para resolverlos encontramos diferentes soluciones, pero como
algunas de estas soluciones suelen ser mejores que otras (desde el punto de vista de la
flexibilidad y la reusabilidad), acaban siendo las preferidas. Estas soluciones se acaban
convirtiendo en Patrones de diseño en programación. Los Patrones de diseño en
programación son soluciones a problemas recurrentes de diseño y que se están aplicando a
diario en la industria del software.

Existen 23 patrones de diseño, que fueron descritos en el libro Design Patterns, Elements of
Reusable Object-Oriented Software de E. Gamma, R. Helm, E. Johnson y J. Vlissides. A este

Material Básico pág. 2


Paradigmas de Programación – Unidad I

grupo de autores se les considera el ‘Gang of Four’ y como los gurus de los Patrones de
diseño en programación Gang Of Four. Estos autores describieron los 23 patrones de diseño
y los clasificaron en tres grupos:

Patrones creacionales, Patrones estructurales, y Patrones de comportamiento.

Patrones Creacionales
Los Patrones creacionales son aquellos que nos permiten crean objetos. Estos patrones
encapsulan el procedimiento de creación de un objeto y suelen trabajar mediante interfaces:

Factory Method
Proporciona una interfaz que permite crear objetos en una superclase, pero delega su
implementación y alteración de los objetos en las subclases.

Abstract Factory
Proporciona una interfaz que permite generar grupos de objetos relacionados, pero sin
especificar sus clases concretas ni su implementación.

Builder
Permite construir objetos complejos paso a paso, separando la creación de dicho objeto de
su estructura. De esta forma podemos utilizar el mismo proceso de construcción para obtener
diferentes tipos y representaciones de un objeto.

Singleton
Este patrón asegura que una clase solo tiene una instancia posible, a la cual se puede
acceder de forma global.

Prototype
Permite copiar o clonar un objeto sin necesidad de que nuestro código dependa de sus clases.

Patrones Estructurales
Los patrones estructurales nos especifican como los objetos y las clases se relacionan entre
ellos para formar estructuras más complejas, de forma que estas sean flexibles y eficientes.
Se basan en la herencia para definir interfaces y obtener nuevas funcionalidades:

Adapter
Se trata de un patrón estructural que permite colaborar entre sí a dos objetos con interfaces
incompatibles, mediante un intermediario con el que se comunican e interactúan.

Bridge
En este patrón se desacopla una abstracción de su implementación, de forma que puedan
evolucionar independientemente.

Composite
Permite crear objetos con estructura en forma de árbol, y luego trabajar con dichas estructuras
como si fueran objetos individuales. En este caso todos los elementos de la estructura utilizan
la misma interfaz.

Material Básico pág. 3


Paradigmas de Programación – Unidad I

Decorator
Este patrón permite añadir nuevas funcionalidades a un objeto (introduciendo este objeto en
un ‘envoltorio’ que contiene las nuevas funcionalidades) sin modificar el comportamiento de
objetos del mismo tipo.

Facade
Proporciona una interfaz simplificada a una estructura compleja (como una librería o un
conjunto complejo de clases).

Flyweight
Se trata de un patrón que permite ahorrar memoria RAM, ya que hace que muchos objetos
compartan propiedades comunes en un mismo objeto, en vez de mantener estas propiedades
en todos y cada uno de los objetos.

Proxy
Es un objeto que actúa como una versión simplificada del original. Un proxy controla en
acceso al objeto original, lo que nos permite realizar algunas tareas antes o después de
acceder a dicho objeto. Este patrón suele utilizarse en las conexiones a internet, el acceso a
los ficheros del dispositivo, etc. Es decir, procesos costosos, y permite reducir el coste y la
complejidad.

Patrones de Comportamiento
Son los más numerosos, se centran en la comunicación entre objetos y se encargan de
gestionar algoritmos, relaciones y responsabilidades entre dichos objetos:

Chain of Responsibility
Permite pasar peticiones a través de una cadena de receptores. Cada uno de estos
receptores puede procesar la petición o pasársela al siguiente. De esta forma se desacopla
al emisor del receptor final de la petición original.

Command
Transforma una petición en un objeto que encapsula la acción y la información que necesita
para ejecutarla.

Interpreter
Se trata de un patrón que, dado un lenguaje, define una representación para su gramática y
el mecanismo para evaluarla.

Iterator
Permite circular a través de los elementos de una colección sin exponer su representación
(listas, pilas, árbol…).

Mediator
Restringe las comunicaciones directas entre objetos y fuerza la comunicación a través de un
único objeto, que actúa de mediador.

Material Básico pág. 4


Paradigmas de Programación – Unidad I

Memento
Permite guardar y restaurar a un estado previo un objeto sin necesidad de revelar los detalles
de su implementación.

Observer
Permite establecer un mecanismo de suscripción para notificar a diferentes objetos de los
eventos que se producen en el objeto que observan.

State
Permite a un objeto cambiar su comportamiento cuando cambia su estado interno. Da la
impresión de que hubiera cambiado su clase.

Strategy
Permite definir que, de una familia de algoritmos, podamos seleccionar uno de ellos en tiempo
de ejecución para realizar cierta acción.

Template method
Este patrón define el esqueleto de un algoritmo en una superclase, pero permite a las
subclases redefinir algunos métodos sin cambiar su estructura.

Visitor
Permite separar los algoritmos de los objetos con los que operan.

Material Básico pág. 5


Paradigmas de Programación – Unidad I

Referencias Bibliográficas
▪ Erich Gama, Richard Helm, Ralph Johnson y John Vlissides (2002) - “Patrones de
Diseño” - 1er Ed. – EE.UU. - Editorial - Addison-Wesley
▪ Kent Beck (2007) -“Implementation Patterns” – 2da Ed -EE.UU. - Editorial - Addison-
Wesley

Material Básico pág. 6

También podría gustarte