Введение
Этот раздел посвящен проектированию объектов JavaBean и различным возможностям проектировщика.
Дополнительная информация об объектах JavaBean приведена в разделе Концепция:
объекты JavaBean.
Свойства JavaBean
Во внутреннем формате значение свойства может храниться как частное поле, но может и вычисляться. Проектировщик может
выбрать предварительное вычисление значения свойства или "ленивое" вычисление, когда значение вычисляется только по
запросу вызывающего.
Проектировщик также может сделать свойство привязанным или ограниченным. Если свойство привязано или ограничено, то
проектировщик должен выбрать механизм событий и уведомления.
События и уведомление
Для реализации механизма уведомления у проектировщика есть две возможности:
-
Воспользоваться классами PropertyChangeSupport и PropertyChangeEvent из пакета java.beans.
-
Создать пользовательский механизм уведомления
Классы из пакета java.beans предоставляют реализацию, применимую в большинстве случаев. Класс
PropertyChangeEvent содержит ссылку на объект, выдавший событие, имя свойства как значение типа String и два
объекта, представляющие старое и новое значения свойства. Класс PropertyChangeSupport обслуживает набор из
PropertyChangeListener и содержит код уведомления в методе firePropertyChange.
Класс PropertyChangeSupport обычно применяется для объектов JavaBean, входящих в состав пользовательских
интерфейсов.
Пользовательское уведомление может оказаться уместным, если требуется минимизировать нагрузку, связанную с созданием
объектов событий. Недостаток заключается в том, что необходимо реализовать механизм уведомления. Проектировщик,
реализующий пользовательский механизм уведомления, должен помнить, что в процессе уведомления другая нить может
добавлять или удалять получатели. Для того чтобы обеспечить правильные действия, в большинстве случаев создается копия
набора получателей; уведомление затем выполняется с помощью этой копии. Большинство опубликованных реализаций создают
такую копию в начале процесса уведомления, что приводит к созданию множества дубликатов и снижению производительности.
Однако, поскольку уведомление более распространено, нежели добавление и удаление получателей, можно заранее создать
копию с более продолжительным сроком действия во время добавления или удаления получателей и затем многократно
использовать ее для уведомления, что ускорит выполнение.
С точки зрения производительности труда разработчиков, пользовательское уведомление следует применять только в том
случае, если "узким местом" производительности оказывается поддержка изменения свойств из пакета java.beans.
В следующих примерах демонстрируется применение и поддержки изменения свойств из пакета java.beans, и
пользовательского механизма уведомления.
Пример: объект JavaBean Tank, применяющий java.beans.PropertyChangeSupport
В этом примере рассматривается объект JavaBean Tank (бак), у которого одно привязанное свойство - level
(уровень). При изменении своего уровня объект Tank выдает событие PropertyChangeEvent, обрабатываемое
объектом TankController.
Пример: объект JavaBean Tank, применяющий пользовательское уведомление
В следующем примере класс Tank реализован с пользовательским, более эффективным механизмом уведомления,
позволяющим избежать создания объектов во время уведомления.
|