1.
Adapter
• Problema: Resolver interfaces incompatibles o proporcionar una interfaz estable
para componentes que tienen diferentes interfaces.
• Solución: Utilizar un objeto intermedio llamado Adapter para convertir la interfaz
original de un componente en otra interfaz que sea compatible con las
necesidades.
2. Factory
• Problema: Determinar quién es responsable de la creación de objetos cuando
hay lógica de creación compleja o se desea separar la creación para mejorar la
cohesión.
• Solución: Crear un objeto de fabricación pura denominado Factory, que se
encargue exclusivamente de crear los objetos necesarios.
3. Singleton
• Problema: Garantizar que una clase tenga exactamente una única instancia y
proporcionar un único punto de acceso global para esta instancia.
• Solución: Definir un método estático en la clase que devuelva esa única instancia
(singleton).
4. Strategy
• Problema: Diseñar diferentes algoritmos o políticas relacionadas, y permitir que
puedan cambiar de forma sencilla.
• Solución: Implementar cada algoritmo o política en una clase independiente que
comparta una interfaz común.
5. Composite
• Problema: Manejar un grupo o estructura compuesta como si fuese un único
objeto (de forma polimórfica).
• Solución: Definir clases para objetos compuestos y atómicos que implementen la
misma interfaz.
6. Facade
• Problema: Proporcionar una interfaz común y unificada para un subsistema que
contiene múltiples implementaciones o interfaces dispares. También sirve para
reducir el acoplamiento entre el subsistema y otros componentes.
• Solución: Crear un único punto de conexión, un objeto llamado Facade, que
envuelve al subsistema y presenta una interfaz única para interactuar con él.
7. Observer
• Problema: Gestionar múltiples objetos interesados en los eventos de un objeto
concreto, permitiendo que cada uno reaccione de manera independiente,
manteniendo un bajo acoplamiento.
• Solución: Definir una interfaz de suscripción (subscriber u observer) que los
objetos interesados implementen. El objeto observado podrá registrar a estos
suscriptores y notificarles cuando ocurra un evento.
Cada patrón tiene como objetivo resolver problemas recurrentes en el diseño de software,
promoviendo soluciones reutilizables y efectivas.