1

RT私は(本質的に)ルートツリーをモデル化するクラスを持っています。

たとえばrt1、次のツリーを保持するインスタンスが既にあるとします。

   1
  / \
 0   2

これで、次のツリーを保持する別のインスタンス ( ) を作成できます。rt2

   5
  / \
 4   9

ただし、これら 2 つのツリーが同形であることは明らかです (つまり、同じ構造を持ち、ノードの名前変更までは同じです)。2 つの根付き木が同型かどうかを計算するルーチンが既にあります (したがって、この部分問題は既に解決されています)。

ここで私の質問: 私の目的のために、プログラムが の新しいインスタンスを実際に構築するのを防ぎ、rt2代わりにrt1(既に構築されている) 要素への参照を与えるだけの設計パターンが必要です。

一方、別のツリー ( rt3)、つまり次のようなものを考えてみましょう。

    1
   / \
  2   5
 /
7

このグラフに対して呼び出される構築ルーチンは、このグラフを表す新しいインスタンスを作成する必要があります (これは と同型ではなくrt1、したがって、これまで生成されていないため)。

そのようなことはありますか?

factory パターンを見ましたが、わかりません (factory は常に新しい要素を構築するようです)。この特定の問題を解決するための「ベストプラクティス」の方法を教えてください。

4

3 に答える 3

1

Flyweight パターンを使用できます。

1

flyweights 配列では、ツリーの型がITree( Flyweight) であるすべてのツリーを保持します。または、あなたの名前としてConcreteFlyweight呼び出すことができます。メソッドで使用するには、ツリーの実装に同等の操作を実装する必要があります。BinaryTreeRTGetFlyweight

于 2013-04-21T18:15:21.950 に答える