Ho un piccolo problema nella scelta del miglior design. Ho alcune (5 al momento) operazioni di elaborazione delle immagini nel mio coe (Java). Ogni fase di elaborazione indipendente dalle altre e consoistica di una piccola quantità di codice, 5-15 linee in generale. Questi sono principalmente wrapper per JAI, AWT e così via.
Il mio attuale design è una classe astratta:
public abstract class AbstractPreProcessingStep {
protected Logger logger = Logger.getLogger(this.getClass().getName());
protected AbstractPreProcessingStep() {
};
public abstract BufferedImage startProcessing(BufferedImage input);
}
Ogni fase di elaborazione implementa questa classe e può essere definita uniforme. (come il modello di strategia).
Poiché ogni fase di elaborazione può avere un diverso set di parametri, ho creato una classe factory, come questa:
public class PreProcessingFactory {
public static AbstractPreProcessingStep createColorInverter() {
return new ColorInverter();
}
public static AbstractPreProcessingStep createRescaler(float rescaleFactor) {
return new Rescaler(rescaleFactor);
}
public static AbstractPreProcessingStep createEdgeDetector() {
return new EdgeDetector();
}
public static AbstractPreProcessingStep createBlackAndWhite() {
return new BlackAndWhite();
}
...
Quindi, se vuoi creare un'immagine in bianco e nero con colori invertiti, devi farlo (codice pseude)
bw = PreProcessingFactory.createBlackAndWhite();
inv = PreProcessingFactory.createInverter();
result = bw.startProcessing(result);
result = inv.startProcessing(result);
Nella mia mente, questo è un buon progetto poiché i dettagli di implementazione sono nascosti e le nuove fasi di elaborazione possono essere facilmente aggiunte aggiungendo una nuova classe.
L'altro approccio che avevo in mente era quello di creare una singola classe con ogni passo come metodo statico - tuttavia, non mi piace "static"
Hai qualche suggerimento per migliorare il codice?