[英]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) {}
}
}
}
這里應用的設計模式的名稱是什么? 我懷疑它是Adapter , Bridge , Facade或Proxy ,但是我不確定是哪個。
我會說這是代理模式 。
您已經創建了一個代理類,該代理類包裝了血腥的反射內容,並將方法調用委托給了另一個對象。
在最一般的形式上,代理是一個類,它充當與其他對象的接口。 代理可以與任何接口:網絡連接,內存中的大對象,文件或其他昂貴或無法復制的其他資源。
您的模式與通過網絡執行某些方法調用非常相似。
聞起來像我的代理。 但是,使用Java的默認動態代理API會更好嗎?
代理的定義:
代理強制對象方法調用通過代理對象間接發生,該代理對象充當要代理的基礎對象的代理或委托。 通常聲明代理對象,以便客戶端對象不表示它們具有代理對象實例。
簡單說明:
因此,您的代碼示例看起來像Proxy 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.