Necesito crear una clase que será responsable del procesamiento del conjunto de resultados, pero puede suceder que se utilicen diferentes algoritmos para procesar ese conjunto de resultados.Patrones de fábrica y estrategia
Soy consciente de las siguientes opciones:
1) patern utilizar la estrategia, a continuación es pseudo código:
interface Strategy {
processResultSet(ResultSet rs);
}
class StrategyA implements Strategy {
processResultSet(ResultSet rs);
}
class StrategyB implements Strategy {
processResultSet(ResultSet rs);
}
clase de contexto contendrá referencia a la estrategia y el cliente debe pasar a la ejecución de la estrategia de crear objeto de contexto, es decir,
class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public doSomething(rs) {
strategy.processResultSet(rs);
}
El problema es que no quiero pasar objeto estrategia de contexto, pero me gustaría crear algo li ke StrategyFactory que será responsable de la creación de la implementación de la Estrategia concreta. Separaría Cliente de Estrategia, ¿es un buen diseño?
¿Es una mezcla de Estrategia y Fábrica o, de hecho, solo Patrón de fábrica?
Si separa al Cliente de su implementación de estrategia, ¿cómo va a saber su Factory (o posiblemente Abstract Factory) qué Strtegy implementar cuando intente instanciar el objeto? –
La fábrica puede obtener esa información no del cliente, sino de otro lugar (configuración, por ejemplo). Sin conocer su implementación exacta, es imposible saberlo. –
Ambos son puntos válidos @ Alcon, pero sería más fácil hacer una sugerencia informada si tuviéramos todos los detalles. –