2009-07-27 11 views
1

を実装を定義します上記イベントハンドラを使用してイベントを発生させます。は、私は次の操作を行うための方法を探しています抽象オブジェクトの

Bプロジェクト: 抽象クラスの実装を定義します。 エンジンを実行します。

実装クラスを登録して、エンジンが実行されたときに呼び出されるクラスであることを確認するにはどうすればよいですか。

EDIT 1:レジスタで、私は何とか質問があまりにも明確でない場合、あなたには、いくつかのより多くを必要とするなら、私に知らせて、与えられた抽象オブジェクトに対して呼び出されるべき実装

申し訳ありませんであるかを限定しなければならないわけ詳細

+0

「実装クラスを登録する」とはどういう意味ですか? –

+0

私が理解する限り(おそらくPesudoコードのようないくつかの明確化を与えることができます)、実際のBプロジェクト実装をAプロジェクト抽象クラスへの参照としてインスタンス化する必要があります。 – Daff

答えて

1

実行時に、プロパティーファイルまたはJavaシステムプロパティーを使用して、Aプロジェクトに渡される実装の名前を付けることができます。 次に、このクラスをクラスパスでclass.forName()とし、それをnewInstance()でインスタンス化します。

しかし、GuiceやSpringのようなフレームワークを使うと、きれいにまとめて接着することができます。

+0

+1 guiceのリンク –

+0

私が実装したソリューションは、あなたの最初の甘えをベースにしています。私はGuiceを見て、それに行くことになるかもしれませんが、今はこれで十分です。 –

2

何かこのような?

class A implements EventHandlerForB { 
... 
} 

public class B { 
    private EventHandlerForB eventHandler; 

    public void registerEventHandler(EventHandlerForB eventHandler) { 
    this.eventHandler = eventHandler; 
    } 
... 
} 

public interface EventHandlerForB { 
... 
} 
+0

これはおそらくユニキャストの方がコンストラクタが優れているだろうと考えていました。 –

+0

この解決策では、私がやっていないハンドラを呼び出すクラスをコーディングする必要がありました。あなたのオブジェクトを使用して、私の問題のクラスBは閉じられ、クラスAは私が実装するものです。 –

0

この問題を解決するためにいくつかの「パターン」があります。 java.util.ServiceLoader

+0

Nooooooooooo !!!!!!!!!! ServiceLoaderではありません! –

+0

なぜですか?説明してください! – dfa

関連する問題