Sobes.tech
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.