1

我有称为“层次结构”的对象,基本上只是一个字符串列表,例如。[1 2 3 4]。我还有一个名为 FormattedHierarchies 的对象,它应该始终以用户希望它们表示的方式保持层次结构的格式化版本,例如 (1-4) 或 {1,2,3,4}。

我的问题是这样的:

我想在层次结构发生更改时立即更新 FormattedHierarchy(例如,如果层次结构从 [1 2 3 4] 更改为 [1 2 3],则 FormattedHierarchy 应从 (1-4) 更改为 (1-3))。

谷歌搜索出现了http://docs.oracle.com/javase/tutorial/uiswing/events/changelistener.html 但我的问题是:如果我想让 Hierarchy 实现 ChangeListener,它必须实现方法“stateChanged” .

类型 Hierarchy 必须实现继承的抽象方法 ChangeListener.stateChanged(ChangeEvent)

让 Hierarchy 创建一个新的 FormattedHierarchy 是不可行的,我也认为这不是好的类设计。这是因为层次结构随后将实现处理其格式的东西(尽管是以间接方式)。

这个问题有没有标准或聪明的解决方案?

4

2 回答 2

1

我会尽量避免需要让两个对象完全同步。我可以建议你三种方式:

  1. Have whoever is calling the Hierarchy setter call also a refresh() method on FormattedHierarchy. This is easy if you call the setter from one or really few places.
  2. Recalculate the String representation of Hierarchy only on demand, without storing it. You need to store the format, not the actual formatted result.
  3. Have Hierarchy maintain a version count, which is incremented every time you change it. FormattedHierarchy holds the formatted string, and the last version count it has seen. When you ask FormattedHierarchy for the string, it first checks if the version count has changed, triggering a recalc of the formatted string if case it did.
于 2012-08-23T13:45:44.507 回答
0

您不能简单地将Hierarchy类与合并FormattedHierarchy,如果需要,为您的不同消费者使用两个不同的接口吗?

通过这种方式,您只需要在您的类中创建特定的设置器,这些设置器将修改字符串[1 2 3 4]以及(1-4)设置[1 2 3]完成(1-3)时的设置。

于 2012-08-23T13:01:52.930 回答