检查对象是否已更改(保留良好的类设计)

时间:2012-08-23 12:53:58

标签: java object-oriented-analysis

我有称为“层次结构”的对象,基本上只是一个字符串列表,例如。 [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”。

  

类型层次结构必须实现继承的抽象方法        ChangeListener.stateChanged(的ChangeEvent)

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

这个问题是否有任何标准或巧妙的解决方案?

2 个答案:

答案 0 :(得分:1)

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

  1. 呼叫Hierarchy二传手机的人也可以refresh()上的FormattedHierarchy方法。如果你从一个或很少的地方打电话给这个设置器,这很容易。
  2. 仅在需要时重新计算Hierarchy的字符串表示形式,而不存储它。您需要存储格式,而不是实际的格式化结果。
  3. Hierarchy维护版本计数,每次更改时都会增加。 FormattedHierarchy保存格式化字符串,以及它看到的最后一个版本计数。当您向FormattedHierarchy询问字符串时,它首先检查版本计数是否已更改,如果出现这种情况,则会触发格式化字符串的重新计算。

答案 1 :(得分:0)

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

通过这种方式,您只需要在您的班级中创建特定的设置器,当一个设置为{时,{}} {{}}}和[1 2 3 4]完成。