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();
}
}