Introducción
Esta directriz se centra en el diseño de JavaBeans y las distintas opciones que puede realizar un diseñador.
Consulte la sección Concepto:
JavaBeans para obtener más información.
Propiedades de los JavaBeans
De forma interna, un valor de propiedad se puede almacenar como un campo privado, pero también puede ser un campo
calculado. El diseñador tiene la posibilidad de precalcular el valor de la propiedad o bien utilizar la evaluación
diferida en al que el valor sólo se calculará cuando el interlocutor lo solicite.
El diseñador también tiene la posibilidad establecer límites o restricciones a la propiedad. Si la propiedad tiene
límites o restricciones, entonces el diseñador debe decidir sobre el mecanismo de sucesos y notificación.
Sucesos y notificación
El diseñador tiene dos opciones para implementar el mecanismo de notificación:
-
Utilizar las clases PropertyChangeSupport y PropertyChangeEvent del paquete java.beans.
-
Crear un mecanismo personalizado de notificación.
Las clases del paquete java.beans proporcionan una implementación que se puede aplicar en la mayoría de
situaciones. PropertyChangeEvent contiene la referencia al objeto que ha desencadenado el suceso, el nombre de
la propiedad como una serie de texto y dos objetos que representan el valor antiguo y el nuevo valor de la propiedad.
La clase PropertyChangeSupport mantiene una colección de PropertyChangeListeners y contiene el código
para la notificación en el método firePropertyChange.
PropertyChangeSupport se utiliza habitualmente para JavaBeans que forman parte de interfaces de usuario.
La notificación personalizada puede ser apropiada cuando es necesario minimizar la sobrecarga asociada a la creación de
objetos de suceso. El inconveniente está en que el implementador debe implementar un mecanismo de notificación. El
implementador de la notificación personalizada debe tener en cuenta que distintas hebras pueden añadir o eliminar
escuchas durante el proceso de notificación. Para proporcionar un comportamiento correcto, en la mayoría de soluciones
se crea una copia de la colección que mantienen los escuchas; la notificación se realiza entonces con la copia. La
mayoría de las implementaciones publicadas crean dicha copia al principio del proceso de notificación, que da lugar a
la creación de muchos clones y degrada el rendimiento. Sin embargo, dado que las notificaciones son mucho más comunes
que las adiciones o eliminaciones de escuchas, una copia de larga vida se puede crear anticipadamente durante la
adición o eliminación de los escuchas y a continuación reutilizarla para las notificaciones, proporcionando una
ejecución más rápida.
Teniendo en cuenta la productividad de los desarrolladores, la notificación personalizada sólo se debería intentar
cuando se demuestre que el rendimiento del soporte de cambio de propiedad del paquete java.beans sea el cuello
de botella.
En los siguientes ejemplos se demuestran tanto el uso del soporte de cambio de propiedad del paquete java.beans
como la utilización de un mecanismo de notificación personalizado.
Ejemplo: JavaBean Tank utilizando java.beans.PropertyChangeSupport
Aquí tenemos un JavaBean representando un tanque, que tiene una propiedad de límite: level. Cuando el
nivel de Tank cambia, Tank desencadena un PropertyChangeEvent que el objeto TankController
maneja.
Ejemplo: JavaBean Tank utilizando notificación personalizada
En el siguiente ejemplo, la clase Tank se implementa con un mecanismo de notificación más eficiente y
personalizado, que prescinde de la creación de objetos durante la notificación.
|