Come parte di una ricerca su cui sto lavorando, sto cercando API pubbliche che funzionino correttamente solo quando applichi una determinata sequenza di azioni su di esse.
Ad esempio, la classe java.nio.channels.SocketChannel
, dalla libreria standard Java, funziona solo correttamente con sequenze come open() -> connect() -> read() -> read() -> close()
. Una dimostrazione più completa se il modo in cui può essere utilizzato può essere rappresentato nel seguente grafico:
UlterioriesempidiAPIdellalibreriastandardJavacherichiedonodeterminatesequenzesonojava.io.PrintStream
(molto simile a quello sopra) e java.util.Iterator
(che richiede una chiamata di next()
tra ogni due% chiamate diremove()
, quindi impone una determinata sequenza).
Quindi, le API preferite per fare X si comportano in questo modo? Mi piacerebbe molto conoscere le API aggiuntive che richiedono una determinata sequenza di metodi per un utilizzo corretto ; specialmente le classi che non fanno parte della libreria standard Java. Più complessa è la sequenza (s) richiesta, meglio è.
Alcune API richiedono una sequenza che si estende su più classi, ad esempio:
X x = new X();
x.setup();
Y y = x.createNewY();
Z z = new Z(y);
z.doSomething();
Questi esempi sono anche interessanti, ma sono principalmente alla ricerca di sequenze che appaiono tutte nella stessa classe.
EDIT ha aggiunto bounty per una maggiore visibilità. Sono sicuro che molti di voi hanno incontrato molte API che corrisponderanno a questa descrizione: apprezzerei davvero alcuni buoni esempi.