4

外部 API を非表示にするためにアダプタを使用しています。

DocumentTreeNodeAdapter   DocumentTreeNode
          |                       |
          |                       |   
  CommonTreeAdapter  ----> CommonTreeNode  ----> CommonTree (foreign)

CommonTreeAdapter には、CommonTreeNode を返す adapt() メソッドがあります。インターフェイスだけ配りたい。クライアント コードは、DocumentTreeNode および DocumentTreeNodeAdapter インターフェイスで動作します。

Adapter の作成をさらに簡素化したいので、Factory が必要です。

DocumentTreeNodeAdapterFactoryImpl

私の質問はその工場についてです:

私はそれを一般的にする傾向があり、メソッドを提供します:

register(Class<? extends DocumentTreeNodeAdapter, Class<?> target);

特定のアダプタを取得するには:

getAdapterFrom(Class<?> target);

例えば

getAdapterFrom(CommonTree.class);

しかし、アダプターの登録はどこに置くべきですか? 実際、現時点ではアダプターが 1 つしかなく、工場でハードコードすることができますが、スケーラビリティのために、その register(...) アプローチが本当に気に入っています。

後で Guice を使用して、すべてを結び付けます。モジュールで Factory を初期化する必要がありますか?それとも、Guice はこれを行うための簡単な方法を提供していますか? 私はまだ Guice の経験がありません。

事前に感謝します。これは広く使用されているため、誰かがこれがどのように行われるかを知っていると確信していますが、サンプルが見つかりません。

敬具

4

1 に答える 1

0

DocumentTreeNodeAdapterインターフェイスです

SimpleDocumentTreeNodeAdapter (アダプター)を拡張DocumentTreeNodeAdapterして含むCommonTreeAdapter

public void register(DocumentTreeNodeAdapter documentTreeNodeAdapter , Class targetClass);
public DocumentTreeNodeAdapter getAdapterFrom(Class aClass);

元:

DocumentTreeNodeAdapter adapter = new SimpleDocumentTreeNodeAdapter(commonTreeAdapter);
documentTreeNodeAdapterFactoryImpl.register(adapter , CommonTree.class);
documentTreeNodeAdapterFactoryImpl.getAdapterFrom(CommonTree.class);

最初の応答:

ただの推測

register(Class<? extends DocumentTreeNodeAdapter, Class<?> target);

になるだろう

public void register(DocumentTreeNodeAdapter documentTreeNodeAdapter);

または、ターゲットが登録するアダプターのクラスでない場合

public void register(DocumentTreeNodeAdapter documentTreeNodeAdapter , Class targetClass);

DocumentTreeNodeAdapter はインターフェースであり、

getAdapterFrom(Class<?> target)

になるだろう

public DocumentTreeNodeAdapter getAdapterFrom(Class aClass);

CommonTree が DocumentTreeNodeAdapter を実装する場合、次の行は引き続き機能します

getAdapterFrom(CommonTree.class);

しかし、Guiceの部分については、私はあなたを助けることができません

于 2012-11-10T14:44:25.460 に答える