繁体   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