Middle+
¿Qué tareas resolvió utilizando patrones de diseño?
sobes.tech AI
Respuesta de la IA
Aplicó varios patrones para mejorar la estructura y mantenibilidad del código:
Creacionales:
- Singleton: Para crear una única instancia de objetos, por ejemplo, un gestor de configuración o un pool de conexiones a la base de datos.
public final class ConfigManager { private static ConfigManager instance; private ConfigManager() {} // Constructor privado public static synchronized ConfigManager getInstance() { if (instance == null) { instance = new ConfigManager(); } return instance; } } - Factory Method: Para crear objetos con propiedades específicas sin especificar explícitamente las clases concretas. Se utilizó al trabajar con diferentes tipos de analizadores de archivos.
- Abstract Factory: Para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas. Se aplicó al trabajar con diferentes tipos de fuentes de datos (por ejemplo, sistema de archivos, base de datos) y sus objetos correspondientes.
Estructurales:
- Adapter: Para adaptar la interfaz de una clase a otra que el cliente espera. Se utilizó para integrar bibliotecas externas con interfaces incompatibles.
public interface Target { void request(); } public class Adaptee { public void specificRequest() { System.out.println("Solicitud específica de Adaptee"); } } public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } - Decorator: Para agregar dinámicamente nuevas responsabilidades a objetos sin modificar su estructura. Se utilizó para añadir funcionalidades de registro o almacenamiento en caché a objetos existentes.
- Composite: Para componer objetos en estructuras de árbol para representar jerarquías "parte-todo". Se usa al trabajar con elementos de interfaz de usuario o estructura de archivos.
Conductuales:
- Observer: Para definir una dependencia de uno a muchos entre objetos de modo que cuando cambie el estado de uno, todos los dependientes sean notificados y actualizados automáticamente. Se utilizó para implementar sistemas de notificación de eventos.
import java.util.ArrayList; import java.util.List; public class Subject { private List<Observer> observers = new ArrayList<>(); private int state; public void attach(Observer observer) { observers.add(observer); } public void setState(int state) { this.state = state; notifyObservers(); } private void notifyObservers() { for (Observer observer : observers) { observer.update(); } } } public interface Observer { void update(); } - Strategy: Para definir familias de algoritmos, encapsular cada uno y hacerlos intercambiables. Se utilizó para seleccionar diferentes estrategias de procesamiento de datos según el contexto.
- Template Method: Para definir la estructura de un algoritmo en una operación, dejando algunos pasos a ser definidos por las subclases. Se aplicó para estandarizar el proceso de manejo de solicitudes.