2

OriginalClass実行時に使用できる場合とできない場合があるクラスを考えてみましょう。クラスが利用可能な場合に実行する必要がOriginalClassあるメソッドがあります。doSomething

これを解決する方法は、 using リフレクションdoSomethingを呼び出すメソッドも持つクラスを作成することです。OriginalClass.doSomethingこのようなもの:

public class CompatibilityClass {

    private static Method originalClass_doSomething = null;

    static {
        initCompatibility();
    };

    private static void initCompatibility() {
        try {
            originalClass_doSomething = Class.forName("originalClass").getMethod("doSomething", new Class[] {});
        } catch (NoSuchMethodException nsme) {
        } catch (SecurityException se) {
        } catch (ClassNotFoundException cnfe) {}
    }

    public static void doSomething() {
        if (originalClass_doSomething != null) {
            try {
                originalClass_doSomething.invoke(null, new Object[]{});
            } catch (Exception e) {}
        }
    }

}

ここで適用されたデザイン パターンの名前は何ですか? AdapterBridgeFacade、またはProxyのいずれかだと思いますが、どれかわかりません。

4

3 に答える 3

2

私はそれがプロキシパターンだと思います。

厄介なリフレクションをラップし、メソッド呼び出しを別のオブジェクトに委譲するプロキシ クラスを作成しました。

最も一般的な形式のプロキシは、他の何かへのインターフェイスとして機能するクラスです。プロキシは、ネットワーク接続、メモリ内の大きなオブジェクト、ファイル、またはコストがかかるか複製が不可能なその他のリソースなど、あらゆるものとやり取りできます。

パターンは、ネットワーク経由でメソッド呼び出しを実行するようなものと非常に似ています。

于 2011-06-20T19:11:53.177 に答える
2

プロキシのようなにおいがします。しかし、Java のデフォルトの Dynamic Proxy APIを使用した方がよいのではないでしょうか?

プロキシの定義:

プロキシは、オブジェクト メソッドの呼び出しをプロキシ オブジェクトを介して間接的に強制的に発生させます。プロキシ オブジェクトは、プロキシされる基になるオブジェクトのサロゲートまたはデリゲートとして機能します。プロキシ オブジェクトは通常、クライアント オブジェクトがプロキシ オブジェクト インスタンスを持っていることを示さないように宣言されます。

于 2011-06-20T19:12:54.497 に答える
1

簡単な説明:

  • Adapter : 意味的に同等/類似しているが、異なるインターフェイスを持つ 2 つのクラス (A と B) がある場合。アダプターは A のインターフェイスを実装しますが、B に委譲するか、またはその逆であるため、A と B を同じ意味で使用できます。
  • ブリッジ- 通常、継承ツリー全体で使用されます (ただし、使用したことはありません)。
  • Facade - 1 つまたは複数のクラスの複雑さをシンプルなインターフェイスの背後に隠す
  • プロキシ- ターゲット オブジェクトと同じインターフェイスであり、委任します。通常、遅延読み込みとターゲットからの分離に使用されます。

したがって、コード サンプルはProxyのように見えます。

于 2011-06-20T19:16:24.907 に答える