簡體   English   中英

此模式的名稱是什么? (答案:遠程代理)

[英]What is the name of this pattern? (answer: Remote Proxy)

考慮一個在運行時可能可用或可能不可用的類OriginalClass OriginalClass具有doSomething方法,如果其類可用,則應執行該方法。

解決此問題的一種方法是創建一個類,該類也具有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) {}
        }
    }

}

這里應用的設計模式的名稱是什么? 我懷疑它是AdapterBridgeFacadeProxy ,但是我不確定是哪個。

我會說這是代理模式

您已經創建了一個代理類,該代理類包裝了血腥的反射內容,並將方法調用委托給了另一個對象。

在最一般的形式上,代理是一個類,它充當與其他對象的接口。 代理可以與任何接口:網絡連接,內存中的大對象,文件或其他昂貴或無法復制的其他資源。

您的模式與通過網絡執行某些方法調用非常相似。

聞起來像我的代理。 但是,使用Java的默認動態代理API會更好嗎?

代理的定義:

代理強制對象方法調用通過代理對象間接發生,該代理對象充當要代理的基礎對象的代理或委托。 通常聲明代理對象,以便客戶端對象不表示它們具有代理對象實例。

簡單說明:

  • 適配器 :當您具有兩個在語義上等效/相似但具有不同接口的類(A和B)時。 適配器實現A的接口,但委托給B,反之亦然,因此A和B可以互換使用
  • -通常與整個繼承樹一起使用(盡管我從未使用過)
  • 外觀 -在更簡單的界面后面隱藏一個或多個類的復雜性
  • 代理 -與目標對象相同的接口,委托給它,通常用於延遲加載和與目標解耦。

因此,您的代碼示例看起來像Proxy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM