es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice el patrón de fábrica con genéricos.

Actualmente estoy aprendiendo cómo escribir código “mejor” en Java utilizando patrones comunes. Lo que estoy enfrentando ahora es lo siguiente:

Tengo varias entidades como Persona, Compañía o Ciudad. Quiero crear Registros para almacenar diferentes instancias de estas entidades en estos registros. Para esto, creé la siguiente clase:

public class MockUpRegistry<K, V> implements IRegistry<K, V>{
HashMap<K, V> items = null;

public MockUpRegistry() {
    items = new HashMap<>();
}

public void addMockUp(K key, V value) {
    items.put(key, value);
}


public ArrayList<V> getAll() {
    ArrayList<V> allEntries = new ArrayList<>();

    for (V value : items.values()) {
        allEntries.add(value);
    };

    return  allEntries;
}


public V getByKey(K key) {
    return items.get(key);
}

public void removeByKey(K key) {
    items.remove(key);
}

}

Es básicamente solo un esqueleto para crear un Registro dependiendo del tipo de entidad que desees almacenar en este registro. Además, luego puedes usarlo a través de una interfaz para agregar, obtener y eliminar instancias. Por ejemplo, creo un registro para Persona así:

IRegistry personRegistry = new MockupRegistry<Integer, Person>();

Lo que me preguntaba ahora era si tenía sentido utilizar el patrón Factory para crear el registro correspondiente. Estaba pensando en algo como esto:

public class RegistryFactory {
public static MockUpRegistry getMockUpRegistry(String entity) {
    switch (entity) {
        case "Person":
            return new MockUpRegistry<Integer, Person>();
        case "Company":
            return new MockUpRegistry<Integer, Company>();
        default:
            return null;
    }
}

}

Conocí el patrón de fábrica en el contexto de la herencia, así que no estoy seguro si el patrón también tiene sentido en mi ejemplo.
Creo que es bastante fácil instanciar los diferentes registros de esa manera. ¿Qué piensas? ¿Puedes pensar en alguna desventaja/ventaja de esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Usar el patrón Factory en este escenario podría ser beneficioso en términos de crear registros para diferentes tipos de entidades sin tener que escribir código repetitivo.

    Algunas ventajas de usar el patrón Factory en este escenario podrían ser:

    • Promueve un acoplamiento débil entre el código cliente e implementación del registro, lo que facilita cambiar entre diferentes implementaciones de registro sin tener que modificar el código cliente.
    • Facilita agregar nuevos tipos de registros en el futuro sin tener que modificar el código cliente.
    • Centraliza la creación de registros en un solo lugar, lo que facilita la gestión y mantenimiento del código base.

    En cuanto a las desventajas, podría haber una pequeña sobrecarga en términos de rendimiento y complejidad debido a la introducción de una clase adicional. Además, si el número de tipos de entidades aumenta significativamente, la declaración switch en la clase Factory podría volverse engorrosa y difícil de mantener.

    En general, utilizar el patrón Factory en combinación con el patrón Registry parece ser una solución práctica y eficiente para el problema de crear registros para diferentes tipos de entidades.

Comments are closed.