Sobes.tech
Middle

¿Qué patrones de diseño, además Singleton, has utilizado?

sobes.tech AI

Respuesta de la IA

  • Método de Fábrica. Utilizado para crear objetos sin especificar explícitamente el tipo de clase. Es útil cuando la lógica de creación del objeto depende de las subclases.
  • Fábrica Abstracta. Se empleó para crear familias de objetos relacionados o dependientes, proporcionando una interfaz para ello, pero sin especificar clases concretas.
  • Builder. Utilizado para crear objetos complejos paso a paso, donde el orden y la combinación de pasos pueden variar. Permite evitar el "constructor telescópico".
  • Observer. Implementado para crear dependencias "uno a muchos" entre objetos, donde un cambio en el estado de un objeto notifica automáticamente a todos los objetos dependientes.
  • Strategy. Se aplicó para definir una familia de algoritmos, encapsular cada uno y garantizar su intercambiabilidad. Permite seleccionar el algoritmo en tiempo de ejecución.
  • Decorator. Utilizado para agregar dinámicamente nuevas responsabilidades a los objetos sin modificar su estructura.
  • Proxy. Se empleó en casos donde se necesita controlar el acceso a un objeto, por ejemplo, para carga perezosa o acceso remoto.
  • Template Method. Utilizado para definir la estructura del algoritmo en la superclase, permitiendo que las subclases redefinan ciertos pasos del algoritmo sin cambiar la estructura principal.
  • Adapter. Se aplicó para transformar la interfaz de una clase en la interfaz que esperan los clientes. Permite que clases con interfaces incompatibles trabajen juntas.
  • Command. Utilizado para encapsular una solicitud en forma de objeto, permitiendo parametrizar clientes con diferentes solicitudes, poner solicitudes en cola o llevar un registro de operaciones, así como soportar la deshacer operaciones.

Ejemplo de implementación del Factory Method:

// Interfaz del producto
interface Product {
    void doSomething();
}

// Productos concretos
class ConcreteProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("Hace algo en Product A");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("Hace algo en Product B");
    }
}

// Interfaz de la fábrica
abstract class Creator {
    public abstract Product factoryMethod();

    public void someOperation() {
        Product product = factoryMethod();
        product.doSomething();
    }
}

// Fábricas concretas
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}