1

「階層」と呼ばれるオブジェクトがあります。基本的には文字列のリストです。[1 234]。また、FormattedHierarchiesと呼ばれるオブジェクトがあり、ユーザーが表現したい方法で階層のフォーマットされたバージョンを常に保持する必要があります(例:(1-4)または{1,2,3,4})。

私の問題はこれです:

階層が変更されたらすぐにFormattedHierarchyを更新したい(たとえば、階層が[1 2 34]から[123]に変更された場合、FormattedHierarchyは(1-4)から(1-3)に変更されます)。

グーグルはhttp://docs.oracle.com/javase/tutorial/uiswing/events/changelistener.htmlを見つけました が、私の問題はこれです:階層にChangeListenerを実装させたい場合は、メソッド「stateChanged」を実装する必要があります。

タイプ階層は、継承された抽象メソッドChangeListener.stateChanged(ChangeEvent)を実装する必要があります

階層に新しいFormattedHierarchyを作成させることは現実的ではなく、これは優れたクラス設計ではないとも考えています。これは、階層がそのフォーマットを処理するものを実装するためです(間接的な方法ではありますが)。

この問題に対する標準的または巧妙な解決策はありますか?

4

2 に答える 2

1

2 つのオブジェクトを正確に同期させる必要はないようにします。次の 3 つの方法を提案できます。

  1. Hierarchyセッターを呼び出している人に、 のrefresh()メソッドも呼び出してもらいますFormattedHierarchy。セッターを 1 つまたは非常に少数の場所から呼び出す場合、これは簡単です。
  2. Hierarchy保存せずに、オンデマンドのみの文字列表現を再計算します。実際のフォーマットされた結果ではなく、フォーマットを保存する必要があります。
  3. 変更するたびにインクリメントされるversion countHierarchy維持します。フォーマットされた文字列と、最後に確認したバージョン カウントを保持します。文字列を要求すると、最初にバージョン カウントが変更されたかどうかがチェックされ、変更された場合は書式設定された文字列の再計算がトリガーされます。FormattedHierarchyFormattedHierarchy
于 2012-08-23T13:45:44.507 に答える
0

必要に応じて、個別のコンシューマーに 2 つの個別のインターフェイスを使用して、Hierarchyクラスを単純にマージできませんか?FormattedHierarchy

このようにして、文字列[1 2 3 4]とセットが完了したときに両方(1-4)を変更する特定のセッターをクラスに作成するだけで済みます。[1 2 3](1-3)

于 2012-08-23T13:01:52.930 に答える