Introduzione
Questa linea guida si concentra sulla progettazione di JavaBean e sulle varie scelte che un progettista può fare.
Per maggiori informazioni sui Javabean, vedere Concetto:
JavaBean.
Proprietà di JavaBean
Internamente un valore di proprietà può essere memorizzato come campo privato, ma può essere anche calcolato. Il
progettista può scegliere di calcolare in anticipo il valore della proprietà o di utilizzare una semplice valutazione,
in cui il valore verrà calcolato se richiesto da un chiamante.
Il progettista può scegliere inoltre di limitare o vincolare la proprietà. Se la proprietà è già limitata o vincolata,
il progettista deve dunque decidere sul meccanismo di eventi e notifica.
Eventi e notifica
Per l'implementazione del meccanismo di notifica, il progettista ha due opzioni:
-
Utilizzare le classi PropertyChangeSupport e PropertyChangeEvent dal pacchetto java.beans.
-
Creare un meccanismo di notifica personalizzato
Le classi dal pacchetto java.beans forniscono un'implementazione applicabile in molte situazioni.
PropertyChangeEvent contiene il riferimento all'oggetto che genera l'evento, il nome della proprietà come String
e due oggetti rappresentanti il vecchio e il nuovo valore della proprietà. La classe PropertyChangeSupport
gestisce una collezione di PropertyChangeListeners e contiene il codice per la notifica nel metodo
firePropertyChange.
PropertyChangeSupport viene comunemente utilizzato per i JavaBean che fanno parte delle interfacce utente.
Le notifiche personali sono utili quando si deve ridurre l'eccesso della creazione di oggetti di evento. L'aspetto
negativo è che l'implementatore deve implementare il meccanismo di notifica. L'implementatore della notifica personale
deve ricordarsi che un thread differente può aggiungere o eliminare listener durante il processo di notifica. Al fine
di fornire il comportamento adeguato, la maggior parte delle soluzioni fanno un copia della collezione che contiene i
listener, la notifica viene dunque attuata utilizzando la copia. Molte delle implementazioni pubblicate fanno la copia
all'inizio del processo di notifica, dando luogo alla creazione di molti cloni e prestazioni carenti. Tuttavia, poiché
le notifiche sono più comuni dell'aggiunta o eliminazione di listener, è possibile creare in anticipo una copia più
duratura durante l'aggiunta o eliminazione di listener e in seguito riutilizzarla, consentendo un'esecuzione più
rapida.
Considerando la produttività degli sviluppatori, la notifica personalizzata dovrebbe essere eseguita solo se il
supporto alla modifica della prestazione della proprietà da parte del pacchetto java.beans risulta essere il
collo di bottiglia.
Gli esempi seguenti dimostrano sia l'utilizzo del pacchetto java.beans sia l'utilizzo di un meccanismo di
notifica personalizzato.
Esempio: Tank JavaBean utilizzando java.beans.PropertyChangeSupport
Di seguito viene illustrato un JavaBean rappresentante un Tank, che ha una proprietà legata: livello.
Quando il livello di Tank viene modificato, Tank genera una PropertyChangeEvent gestita
dall'oggetto TankController object.
Esempio: Tank Java Bean che utilizza una notifica personalizzata
Nell'esempio seguente, la classe Tank viene implementata con un meccanismo di notifica personalizzato e più
efficace, che permette di evitare la creazione di oggetti durante la notifica.
|