0

BeanTreeView とその中にいくつかのノードがあります。すべてのノードにはコンストラクターがあります

public class ProjectNode extends AbstractNode {

public ProjectNode(MainProject obj, DiagramsChildren childrens) {
    super (new ProjectsChildren(), Lookups.singleton(obj));
    setDisplayName ( obj.getName());

}

ExplorerTopComponent のツリーのルートとして Rootnode を次のように設定します。

private final ExplorerManager mgr = new ExplorerManager();

public ExplorerTopComponent() {
    associateLookup (ExplorerUtils.createLookup(mgr, getActionMap()));
    mgr.setRootContext(new RootNode());
}

そして今、あるノードから MainProject obj を取得するにはどうすればよいですか? 別のクラスで取得する必要があります。

4

1 に答える 1

1

こんにちはバッドガール/ジョセフ;-)

質問のタイトルに答えるには (netbeans の内部については何もありません):

この質問は、ルックアップとは何かという質問に少し答えると思います。通常はインターフェースである提供されたキーへの1つ以上の実装を取得します。

次にジョセフは、「このアンチパターンを置き換えることができる単純なパターンはどれですか?」と尋ねました。NetBeans プラットフォームのルックアップ パターンを置き換えることはできませんが、彼の質問に答えるには、手動配線、Guice、pico コンテナ、さらにはスプリングを介したアプリケーションでのルックアップの代わりに依存性注入を使用します。このようなライブラリの優れた点は、依存関係のみを構成し、適切に構成されたインスタンスをコンテナーから取得できることです。この素敵な写真を見て、これを感じてください。(ほとんどの依存性注入ツールでは、ライフサイクル管理も可能です。)

手配線による依存性注入の例を示すには、次のクラスを想定します。

class Path {
    List edges = new ArrayList();
    public void setEdges(List e) {
     edges = e;
    }
}

これで、ArrayList 実装を LinkedList に簡単に切り替えることができます。

p = new Path();
p.setEdges(new LinkedList());

ルックアップの概念では、これはそれほど簡単ではありません (しかし、よくわかりません):

class Path {
  List edges = Lookup.create(List.class);
}

リンクされたリストの置換を使用すると、次のように簡単に使用できます。

Lookup.set(List.class, LinkedList.class);
p = new Path();    

しかし問題は次のとおりです。リストの実装を必要とするいくつかの異なるクラスがある場合、ルックアップをどのように使用しますか?

それを使用するクラスに応じてルックアップを実装します。

class Path {
  List edges = Lookup.get(Path.class).create(List.class);
}

しかし、正直に言うと、私は単純な依存性注入の方法を好みます。この紹介では、ルックアップと依存性注入 (コンストラクター + セッター注入) も比較しています。

詳細については、サービス ロケーター (ルックアップ) と制御の反転 (依存性注入) について説明している、martin fowler によるこの興味深い記事を参照してください。依存性注入の歴史については、こちらをご覧ください。

于 2010-03-27T22:41:23.040 に答える