Cosa fare se le classi con la stessa interfaccia hanno una firma del metodo simile ma diversa?Cosa fare se le classi con la stessa interfaccia hanno una firma di metodo simile ma diversa?
Diciamo che ho un progetto per calcolare costi diversi (per ottenere un costo totale alla fine).
Nel mio programma, ci sono diverse classi di calcolatori, ovvero ACostCalculator
, BCostCalculator
e così via. Quando viene invocato un metodo calculate()
per calcolare un costo, viene passato un contenitore di costi anche a tali calcolatori di costi. In un buon scenario, posso creare un'interfaccia CostCalculator
per ogni calcolatrice di costi.
Tuttavia, il calcolo per costo diverso ha richiesto risorse diverse. Nel mio programma in corso, che fanno essere come:
//getResource() are costly method while several costs need this. So do it outside calculate() method.
ResourceA resourceA = getResourceA();
ResourceB resourceB = getResourceB();
CostContainer costContainer = new CostContainer();
CostCalculator aCostCalculator = new ACostCalculator();
...
CostCalculator eCostCalculator = new ECostCalculator();
aCostCalculator.calculate(costContainer);
bCostCalculator.calculate(costContainer)
cCostCalculator.calculate(costContainer, resourceA);
dCostCalculator.calculate(costContainer, resourceA);
eCostCalculator.calculate(costContainer, resourceA, resourceB);
Se la firma è esattamente lo stesso, posso fare un ciclo favorevole per farlo in una sola volta. Tuttavia, poiché sono simili ma diversi, non riesco nemmeno a fare una buona interfaccia.
Non sono sicuro che ci siano buoni modi per farlo. Quello che mi viene in mente è generalizzare tutto calculate()
metodo per in
calculate(CostContainer costContainer, List<Object> resources);
Tutte le idee? Grazie per aver risposto.
... o varargs anziché l'elenco. –