Devo creare una classe che sarà responsabile dell'elaborazione del set di risultati, ma potrebbe accadere che algoritmi diversi debbano essere utilizzati per elaborare quel set di risultati.Modelli di fabbrica e strategia
sono consapevole delle seguenti opzioni:
1) utilizzare la strategia di patern, sotto è pseudo codice:
interface Strategy {
processResultSet(ResultSet rs);
}
class StrategyA implements Strategy {
processResultSet(ResultSet rs);
}
class StrategyB implements Strategy {
processResultSet(ResultSet rs);
}
classe Context conterrà riferimento alla strategia e client dovrebbe passare l'attuazione della strategia di creazione Oggetto di contesto, ovvero
class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public doSomething(rs) {
strategy.processResultSet(rs);
}
Il problema è che non voglio passare l'oggetto strategia al contesto ma mi piacerebbe creare qualcosa li ke StrategyFactory che sarà responsabile della creazione di una concreta implementazione della strategia. Separerebbe il Cliente dalla Strategia - è un buon design?
Si tratta di un mix di strategia e fabbrica o di fatto solo modello di fabbrica?
Se si separa il Cliente dall'implementazione della sua strategia, in che modo Factory (o eventualmente Factory Astratta) saprà quale Strtegy implementare quando tenta di instanciare l'oggetto? –
La factory potrebbe ottenere tali informazioni non dal client, ma da qualche altra parte (configurazione, ad esempio). Senza sapere la sua esatta implementazione è impossibile dirlo. –
Entrambi sono punti validi @Alcon, ma sarebbe più facile fare un suggerimento informato se avessimo tutti i dettagli. –