Ho un gestore di eventi che crea oggetti per i quali ha bisogno di dati sia prima che dopo un evento. Il gestore di eventi stesso implementa il WebDriverEventListener
interfaccia e viene registrato di conseguenza. Cioè, non ho il controllo su come la classe viene invocata.
Per creare gli oggetti, utilizzo un campo mutabile. Ecco un semplice esempio (in Java):
public class MyEventHandler {
private MyType myMutableField;
public void beforeEvent(DataA a) {
myMutableField = new MyType();
myMutableField.setA(a);
}
public void afterEvent(DataB b) {
myMutableField.setB(b);
// Do something with myMutableField...
}
}
Per evitare invocazioni di metodi inappropriate (ad esempio invocazioni consecutive di beforeEvent
o afterEvent
), faccio quanto segue:
public class MyEventHandler {
private MyType myMutableField;
public void beforeEvent(DataA a) {
if ( myMutableField != null ) {
throw new IllegalStateException();
}
// ...
}
public void afterEvent(DataB b) {
// ...
myMutableField = null;
}
}
Ho anche implementato meccanismi tali che i setter possono essere richiamati una sola volta.
Tuttavia, non sono molto contento di questo approccio al design e mi chiedo se c'è un pattern che mi aiuta a) evitare il campo mutabile e / o b) rendere MyType
immutabile.