我有称为“层次结构”的对象,基本上只是一个字符串列表,例如。 [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是不可行的,我也认为这不是好的类设计。这是因为层次结构会实现处理其格式的内容(尽管是间接的)。
这个问题是否有任何标准或巧妙的解决方案?
答案 0 :(得分:1)
我会尽量避免让两个对象保持完全同步。我可以建议你三种方式:
Hierarchy
二传手机的人也可以refresh()
上的FormattedHierarchy
方法。如果你从一个或很少的地方打电话给这个设置器,这很容易。Hierarchy
的字符串表示形式,而不存储它。您需要存储格式,而不是实际的格式化结果。Hierarchy
维护版本计数,每次更改时都会增加。 FormattedHierarchy
保存格式化字符串,以及它看到的最后一个版本计数。当您向FormattedHierarchy
询问字符串时,它首先检查版本计数是否已更改,如果出现这种情况,则会触发格式化字符串的重新计算。答案 1 :(得分:0)
您是否可以简单地将Hierarchy
类与FormattedHierarchy
合并,如果需要,为您的不同消费者使用两个不同的接口?
通过这种方式,您只需要在您的班级中创建特定的设置器,当一个设置为{时,{}} {{}}}和[1 2 3 4]
完成。