8.- Propiedades compartidas y restringidas.
Los objetos de una clase que tiene una propiedad compartida o ligada notifican a otros objetos oyentes interesados, cuando el valor de dicha propiedad cambia, permitiendo a estos objetos realizar alguna acción. Cuando la propiedad cambia, se crea un objeto (de una clase que hereda de ObjetEvent
) que contiene información acerca de la propiedad (su nombre, el valor previo y el nuevo valor), y lo pasa a los otros objetos oyentes interesados en el cambio.
La notificación del cambio se realiza a través de la generación de un PropertyChangeEvent
PropertyChangeEvent. Los objetos que deseen ser notificados del cambio de una propiedad limitada deberán registrarse como auditores. Así, el componente de software que esté implementando la propiedad limitada suministrará métodos de esta forma:
public void addPropertyChangeListener (PropertyChangeListener l)
public void removePropertyChangeListener (PropertyChangeListener l)
Los métodos precedentes del registro de auditores no identifican propiedades limitadas específicas. Para registrar auditores en el PropertyChangeEvent
de una propiedad específica, se deben proporcionar los métodos siguientes:
public void addPropertyNameListener (PropertyChangeListener l)
public void removePropertyNameListener (PropertyChangeListener l)
En los métodos precedentes, PropertyName
se sustituye por le nombre de la propiedad limitada. Los objetos que implementan la interfaz PropertyChangeListener
deben implementar el método propertyChange()
. Este método lo invoca el componente de software para todos sus auditores registrados, con el fin de informarles de un cambio de una propiedad.
Una propiedad restringida es similar a una propiedad ligada salvo que los objetos oyentes que se les notifica el cambio del valor de la propiedad tienen la opción de vetar cualquier cambio en el valor de dicha propiedad.
Los métodos que se utilizan con propiedades simples e indexadas que veíamos anteriormente se aplican también a las propiedades restringidas. Además, se ofrecen los siguientes métodos de registro de eventos:
public void addPropertyVetoableListener (VetoableChangeListener l)
public void removePropertyVetoableListener (VetoableChangeListener l)
public void addPropertyNameListener (VetoableChangeListener l)
public void removePropertyNameListener (VetoableChangeListener l)
Los objetos que implementa la interfaz VetoableChangeListener
deben implementar el método vetoableChange()
. Este método lo invoca el componente de software para todos sus auditores registrados con el fin de informarles del cambio en una propiedad.
Todo objeto que no apruebe el cambio en una propiedad puede arrojar una PropertyVetoException
dentro del método vetoableChange()
, para informar al componente cuya propiedad restringida hubiera cambiado de que el cambio no se ha aprobado.