1

私のプロジェクトでは、いくらかパブリッシャー/サブスクライバーパターンを使用しています。

出版社にツリーデータ構造を持たせたいのですが。ツリー内の何かを変更するたびに(構造の変更であれ、ノード値の変更であれ)、変更セットはサブスクライバーに公開されます。

これらにはツリーのローカルコピーがあり、チェンジセットを受信すると内部構造が変更されます。パブリッシャーに接続するとき、サブスクライバーは最初にツリー全体のディープコピーを要求する必要があります。

上記を行う既存のJavaライブラリについて誰か知っていますか?

ヒントは大歓迎です

4

1 に答える 1

0

さて、これまで「解決策」を見つけたので、ここに一般的な考えを投稿します。

java.util.Mapインターフェイスを実装するクラスを作成しました。このクラスを呼び出しましょう。DMPublisher<K, V>一方、KはキータイプでありV、マップ内の値のタイプです。

マップインターフェイスを実装する別のクラスがありますDMSubscriber<K, V>

パブリッシャークラスは、明示的に閉じられるまでソケットのリッスンを開始します。サブスクライバーは、作成時にこのソケットに接続します。

パブリッシャークラスには、キャッシュとして使用される実際のハッシュマップの属性があります。パブリッシャーのすべての操作方法について、キャッシュ内の対応するアイテムがそれに応じて変更されます。更新は、上記のソケットを介してすべてのサブスクライバーに送信されるようになりました。

マップインターフェイスのほかに、サブスクライバーはオブザーバーパターンリスナーを使用することもできます。ソケットから受信したすべての更新が、これらすべてのリスナーにディスパッチされるようになりました。

接続時に、パブリッシャーは、一貫した状態を維持するために、現在キャッシュに保持されているすべてのデータをサブスクライバーに送信します。

マルチスレッドをサポートするために、両方のクラスが同期されます。

ソースコードに興味のある方は、お気軽にご連絡ください。

于 2013-05-15T16:57:20.350 に答える