主题

简介 To top of page

本指南关注于设计 JavaBean 以及设计者可以采用的不同选项。

关于 JavaBean 的更多信息,请参阅概念:JavaBeans

JavaBean 属性 To top of page

在内部可以将属性值存储为私有字段,但也可以计算它。设计者可以选择预先计算属性的值,或使用惰性求值,这样只在调用者请求时才会计算值。

设计者还可以选择绑定或限制属性。如果绑定或限制了该属性,则设计者必须决定事件和通知机制。

事件和通知 To top of page

对于通知机制的实施,设计者有两个选择:

  • 使用 java.beans 包的 PropertyChangeSupportPropertyChangeEvent 类。
  • 创建定制通知机制

java.beans 包的类提供了适用于多数情形的实施。PropertyChangeEvent 包含对击发事件的对象的引用、属性的名称(字符串)以及表示属性的旧值和新值的两个对象。类 PropertyChangeSupport 维护 PropertyChangeListeners 的集合,并包含方法 firePropertyChange 中的通知的代码。

附带文本中描述的图。

组成用户界面部分的 JavaBeans 通常都使用 PropertyChangeSupport

在需要最小化事件对象创建开销的地方可能适合使用定制的通知。缺点是实施者必须实现通知机制。定制通知的实施者必须记住在通知进程期间,不同线程可能添加或除去监听程序。为了提供正确的行为,大多数解决方案创建保留监听程序的集合副本;然后使用该副本执行通知。大多数已发布的实施在通知进程开始时创建这样的副本,这会导致创建许多克隆并降低性能。但是,因为通知比监听程序添加或除去更常见,可以在监听程序的添加或除去期间预先创建一个存在时间较长的副本,然后对通知重复使用该副本,以提供更快的执行。

考虑到开发人员的生产性,仅应在证明 java.beans 包中属性更改支持的性能是一个瓶颈时,才尝试使用定制通知。

以下示例演示 java.beans 包中属性更改支持的使用和定制通知机制的使用。

 

示例:使用 java.beans.PropertyChangeSupport 的 Tank JavaBean

这里有一个表示 Tank 的 JavaBean,它有一个绑定属性:level。当 Tank 的等级更改时,Tank 击发 PropertyChangeEvent,后者由 TankController 对象处理。

附带文本中描述的图。

 

示例:使用定制通知的 Tank Java Bean

在下面的示例中,使用一个定制的、更有效的通知机制实施类 Tank,这样避免了在通知期间创建对象。

附带文本中描述的图。




此内容全部或部分由 Inferdata Corporation 开发。

Rational Unified Process   2003.06.15