0% encontró este documento útil (0 votos)
13 vistas8 páginas

Patrones de Diseño en Programación

Cargado por

Luis Alfredo SV
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas8 páginas

Patrones de Diseño en Programación

Cargado por

Luis Alfredo SV
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

**Patrones Creacionales:**

1. Factory Method:

Descripción: Define una interfaz para crear objetos, pero permite que las subclases decidan qué clase
concreta instanciar.

Uso: Se utiliza cuando se necesita delegar la creación de objetos a las subclases, permitiendo una
mayor flexibilidad en la creación de objetos.

Problema que soluciona: Abstrae el proceso de creación de objetos y permite a las subclases definir la
lógica específica de creación.

2. Abstract Factory:

Descripción: Proporciona una interfaz para crear familias de objetos relacionados sin especificar sus
clases concretas.

Uso: Se utiliza cuando se necesita crear objetos que están interrelacionados o dependen entre sí, pero
se quiere desacoplar el código de las clases concretas.

Problema que soluciona: Permite crear objetos relacionados sin acoplar el código a clases concretas,
facilitando la creación de variantes de productos.

3. Builder:

Descripción: Separa la construcción de un objeto complejo de su representación, permitiendo la


creación de diferentes representaciones utilizando el mismo proceso de construcción.

Uso: Se utiliza cuando se quiere crear un objeto compuesto por múltiples partes y se desea tener
flexibilidad en la construcción de esas partes.

Problema que soluciona: Simplifica la creación de objetos complejos, evitando la necesidad de tener
múltiples constructores con parámetros diferentes.

4. Prototype:

Descripción: Permite la creación de nuevos objetos mediante la clonación de un objeto existente,


evitando así la creación de nuevas instancias.

Uso: Se utiliza cuando se desea crear nuevos objetos a partir de prototipos existentes en lugar de
construirlos desde cero.

Problema que soluciona: Facilita la creación de nuevos objetos al evitar la necesidad de crear nuevas
instancias desde cero, especialmente cuando la creación es costosa.
5. Singleton:

Descripción: Garantiza que una clase tenga una única instancia y proporciona un punto de acceso
global a ella.

Uso: Se utiliza cuando se necesita tener un único objeto compartido en todo el sistema, como una
conexión a una base de datos o un registro de eventos.

Problema que soluciona: Evita la creación de múltiples instancias de una clase y proporciona un acceso
controlado a la misma.

**Patrones Estructurales:**

6. Adapter:

Descripción: Permite que objetos con interfaces incompatibles trabajen juntos al convertir la interfaz
de uno en otra que los clientes esperan.

Uso: Se utiliza cuando se necesita adaptar una clase existente para que sea compatible con una interfaz
requerida.

Problema que soluciona: Permite que objetos con interfaces diferentes trabajen juntos sin cambiar su
código fuente original.

7. Bridge:

Descripción: Desacopla una abstracción de su implementación, permitiendo que ambas varíen


independientemente.

Uso: Se utiliza cuando se desea separar la abstracción de su implementación y permitir que ambas
evolucionen por separado.

Problema que soluciona: Evita el acoplamiento entre una abstracción y su implementación, lo que
facilita la extensibilidad y flexibilidad del sistema.

8. Composite:

Descripción: Permite tratar a los objetos individuales y a las composiciones de objetos de manera
uniforme, creando una estructura jerárquica.

Uso: Se utiliza cuando se desea tratar a los objetos individuales y a las composiciones de objetos de
manera uniforme.
Problema que soluciona: Simplifica la manipulación de estructuras jerárquicas de objetos, permitiendo
tratar a los objetos compuestos e individuales de manera similar.

9. Decorator:

Descripción: Agrega dinámicamente funcionalidades adicionales a un objeto existente sin alterar su


estructura básica.

Uso: Se utiliza cuando se desea agregar funcionalidades a un objeto de manera flexible y sin afectar su
comportamiento original.

Problema que soluciona: Permite agregar funcionalidades adicionales a un objeto de forma dinámica y
modular, evitando la necesidad de crear múltiples clases heredadas con diferentes combinaciones de
funcionalidades.

10. Facade:

Descripción: Proporciona una interfaz simplificada para un conjunto de interfaces más complejas
dentro de un subsistema.

Uso: Se utiliza cuando se desea proporcionar una interfaz unificada y fácil de usar para un subsistema
complejo.

Problema que soluciona: Simplifica el acceso y la utilización de un subsistema complejo al


proporcionar una interfaz de nivel superior.

11. Flyweight:

Descripción: Comparte eficientemente objetos pequeños y granulares para reducir la utilización de


memoria.

Uso: Se utiliza cuando se necesita crear una gran cantidad de objetos similares para reducir la carga de
memoria.

Problema que soluciona: Minimiza la utilización de memoria al compartir objetos comunes en lugar de
crear múltiples instancias idénticas.

12. Proxy:

Descripción: Proporciona un sustituto o representante de otro objeto para controlar su acceso.

Uso: Se utiliza cuando se necesita controlar el acceso a un objeto, ya sea para agregar funcionalidad
adicional o para restringir el acceso a ciertos usuarios.
Problema que soluciona: Proporciona una capa intermedia entre el cliente y el objeto real,
permitiendo controlar el acceso, la seguridad, el rendimiento o la implementación transparente de
funcionalidades adicionales.

**Patrones de Comportamiento:**

13. Chain of Responsibility:

Descripción: Permite que múltiples objetos tengan la oportunidad de manejar una solicitud de manera
secuencial, evitando acoplamientos entre el remitente y el receptor.

Uso: Se utiliza cuando se quiere desacoplar el remitente de los receptores y permitir que varios
objetos tengan la oportunidad de manejar una solicitud.

Problema que soluciona: Simplifica el procesamiento y manejo de solicitudes al evitar acoplamientos


directos y permitir la flexibilidad en la cadena de objetos responsables.

14. Command:

Descripción: Encapsula una solicitud como un objeto, permitiendo parametrizar clientes con diferentes
solicitudes, encolar o registrar solicitudes y admitir operaciones reversibles.

Uso: Se utiliza cuando se desea parametrizar los objetos según las solicitudes que reciben, encolar o
registrar solicitudes para su posterior ejecución, o admitir operaciones reversibles.

Problema que soluciona: Desacopla el objeto que realiza la solicitud del objeto que la procesa, lo que
permite mayor flexibilidad y manejo de solicitudes.

15. Iterator:

Descripción: Proporciona una forma de acceder secuencialmente a los elementos de una colección sin
exponer su representación subyacente.

Uso: Se utiliza cuando se desea recorrer una colección de objetos sin exponer su estructura interna.

Problema que soluciona: Simplifica el acceso y recorrido de elementos de una colección sin acoplar el
código al tipo concreto de la colección.

16. Mediator:

Descripción: Define un objeto que encapsula cómo un conjunto de objetos interactúa, promoviendo
un acoplamiento débil entre ellos.
Uso: Se utiliza cuando se necesita reducir el acoplamiento entre objetos y centralizar la comunicación
y coordinación entre ellos.

Problema que soluciona: Simplifica la comunicación y coordinación entre objetos al proporcionar un


objeto centralizado para controlar las interacciones.

17. Memento:

Descripción: Captura y almacena el estado interno de un objeto sin violar su encapsulación, para
poder restaurarlo más tarde.

Uso: Se utiliza cuando se necesita guardar y restaurar el estado de un objeto sin revelar su estructura
interna.

Problema que soluciona: Permite guardar y restaurar el estado de un objeto de manera transparente,
facilitando la implementación de operaciones de deshacer/rehacer.

18. Observer:

Descripción: Establece una relación uno a muchos entre objetos, de manera que cuando un objeto
cambia su estado, notifica y actualiza automáticamente a todos los objetos dependientes.

Uso: Se utiliza cuando se necesita mantener una sincronización entre diferentes objetos sin acoplarlos
directamente.

Problema que soluciona: Permite la comunicación y actualización automática entre objetos, evitando
el acoplamiento excesivo y simplificando la gestión de cambios de estado.

19. State:

Descripción: Permite que un objeto altere su comportamiento cuando su estado interno cambia,
creando la ilusión de que ha cambiado de clase.

Uso: Se utiliza cuando el comportamiento de un objeto depende de su estado y necesita cambiar


dinámicamente en tiempo de ejecución.

Problema que soluciona: Simplifica la implementación de comportamientos diferentes basados en el


estado de un objeto y evita el uso de múltiples sentencias condicionales.

20. Strategy:

Descripción: Define una familia de algoritmos, encapsula cada uno y los hace intercambiables, lo que
permite que el algoritmo varíe independientemente de los clientes que lo utilizan.
Uso: Se utiliza cuando se desea cambiar dinámicamente el algoritmo utilizado por un objeto en tiempo
de ejecución.

Problema que soluciona: Proporciona una forma flexible de definir e intercambiar algoritmos en
tiempo de ejecución, sin acoplar el código a una implementación concreta.

21. Template Method:

Descripción: Define el esqueleto de un algoritmo en una clase base, permitiendo que las subclases
proporcionen implementaciones concretas para ciertas partes del algoritmo.

Uso: Se utiliza cuando se desea definir un algoritmo general en una clase base, dejando que las
subclases implementen partes específicas.

Problema que soluciona: Evita la duplicación de código y define una estructura general para
algoritmos, permitiendo que las subclases personalicen partes específicas.

22. Visitor:

Descripción: Permite separar algoritmos de la estructura de los objetos en los que operan,
permitiendo agregar nuevos algoritmos sin modificar las clases existentes.

Uso: Se utiliza cuando se necesita realizar operaciones en una estructura de objetos sin modificar las
clases de dicha estructura.

Problema que soluciona: Permite agregar nuevos comportamientos a una estructura de objetos sin
modificar dicha estructura, lo que facilita la extensibilidad y mantenibilidad.

**Otros Patrones:**

23. MVC (Modelo-Vista-Controlador):

Descripción: Separa la representación interna de los datos (Modelo), la presentación y lógica de


interacción con el usuario (Vista) y la lógica de control (Controlador) en componentes independientes.

Uso: Se utiliza para estructurar y separar la lógica de la aplicación en tres componentes principales, lo
que facilita el desarrollo y mantenimiento del software.

Problema que soluciona: Permite la separación de responsabilidades en una aplicación y facilita la


modificación y reutilización de los componentes.

24. MVVM (Modelo-Vista-Modelo de Vista):


Descripción: Extensión del patrón MVC que introduce un Modelo de Vista que se encarga de manejar
la lógica de presentación y la comunicación entre el Modelo y la Vista.

Uso: Se utiliza en aplicaciones que requieren una separación clara entre la lógica de presentación y los
datos, permitiendo una mayor flexibilidad y mantenibilidad.

Problema que soluciona: Separa de manera más clara la lógica de presentación de los datos y facilita el
enlace entre la Vista y el Modelo.

25. ORM (Mapeo Objeto-Relacional):

Descripción: Permite mapear objetos de una aplicación a tablas de una base de datos relacional y
viceversa, simplificando las operaciones de persistencia.

Uso: Se utiliza cuando se desea abstraer la lógica de persistencia de los objetos de una aplicación y
trabajar con ellos de manera más orientada a objetos.

Problema que soluciona: Simplifica el acceso y manipulación de datos en una base de datos relacional,
eliminando la necesidad de escribir consultas SQL directamente.

26. DAO (Objeto de Acceso a Datos):

Descripción: Proporciona una interfaz para acceder y manipular datos en una fuente de datos,
ocultando los detalles de implementación subyacentes.

Uso: Se utiliza cuando se desea abstraer el acceso y manipulación de datos en una fuente de datos,
permitiendo un mayor desacoplamiento del código.

Problema que soluciona: Abstrae las operaciones de acceso a datos, lo que facilita el cambio de la
fuente de datos y mejora la modularidad y mantenibilidad del código.

27. Service Locator:

Descripción: Proporciona una forma de obtener instancias de servicios mediante un servicio


centralizado, en lugar de que los clientes los creen directamente.

Uso: Se utiliza cuando se desea desacoplar los clientes de las implementaciones de servicios y se
necesita un mecanismo centralizado para obtener instancias

de servicios.

Problema que soluciona: Desacopla los clientes de las implementaciones de servicios, lo que facilita la
sustitución y configuración de servicios en tiempo de ejecución.
28. Front Controller:

Descripción: Centraliza el manejo de solicitudes y el enrutamiento en una aplicación web,


proporcionando un punto de entrada único para todas las solicitudes.

Uso: Se utiliza en aplicaciones web para manejar de manera centralizada las solicitudes, controlar el
flujo y enrutamiento de la aplicación.

Problema que soluciona: Centraliza la lógica de manejo de solicitudes y permite un mayor control
sobre el flujo y enrutamiento de una aplicación web.

También podría gustarte