[英]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.