Quali sono le soluzioni generali per consentire al client di scegliere l'istanza concreta di un output del metodo?
Ad esempio, nella API di Lucene il search riceve e modifica il parametro di input del collector, ma questo è generalmente considerato una cattiva pratica:
IndexReader reader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
Un'alternativa sarebbe quella di fornire un Factory come input e fare in modo che il metodo di ricerca restituisca l'istanza creata.
Che altro?