Quote Originariamente inviata da fermat Visualizza il messaggio
il prepareContent l'ho levato in quanto FileParseResult già mi da la stringa che mi serve.
Ok, io avevo previsto quella fase semplicemente perché avevo visto che il tuo jpegParser() era l'unico che non faceva il setContent(handler.toString()); Quindi ho pensato: c'è per tutti (quindi è un "default") mentre per il jpeg no, quindi il content lo si potrebbe mettere fisso a null.

Quote Originariamente inviata da fermat Visualizza il messaggio
però ho sostituito il primo parametro con Metadata, che elaboro dopo (ma ho qualce dubbio su quello che ho fatto).
Puoi scegliere di mettere e tenere quello che vuoi nell'oggetto di "risultato". Insomma, metti pure quello che ritieni utile per chi userà il risultato!

Quote Originariamente inviata da fermat Visualizza il messaggio
e questo il registry:

codice:
public class FileParserRegistry {

    private Map<String, FileParser> map = new HashMap<>();

    public void add(FileParser parser, String type) {
        map.put(type, parser);
    }

    public void add(Parser parser, String type1, String type2) {
        
    }

    public FileParser getForType(String type) {
        return map.get(type);
    }
}
Ok, occhio solo che il secondo add ha Parser mentre invece dovrebbe essere FileParser. Io avevo pensato all'uso del varargs, ovvero un ultimo parametro String... types
Puoi metterne sia uno così, sia tenere anche le versioni in overload con 1 o 2 type (per comodità/efficienza). Assolutamente a tua scelta.

Quote Originariamente inviata da fermat Visualizza il messaggio
- l'elaborazione di Metadata, e quindi l'uso dello StringBuilder: lo metto qui, oppure forse è meglio elaborarlo direttamente nel PanelDetail?
Quella composizione di stringa non l'avevo messa nel FileParser perché in effetti il fatto di voler avere una forma aaa: bbb\nccc: ..... è una questione di "presentazione", riguarda la user interface ... non il parsing.

Quote Originariamente inviata da fermat Visualizza il messaggio
- nella magior parte dei casi come secondo parametro di WindowDetail avrò un PanelDetail, a parte quando uso immagini o suoni: per evitare altri switch / if, potrei aggiungere anche quello al registry o devo seguire una strada ancora diversa?
Se le possibilità sono poche es. testo o immagine o audio, questa informazione la potresti mettere nell'oggetto di result (e impostata da ciascuna classe di FileParser che ovviamente "sa" che tipo tratta) magari come enum. Poi fai uno switch. Non mi pare che sia una "brutta" cosa. Anche perché un conto è il parsing, un altro conto è la "presentazione" dei dati.
Ci sono sicuramente "design" migliori ma si dovrebbe andare un po' oltre e forse è troppo per il tuo caso o forse non serve.