【问题标题】:Eclipse adapter factory implementationEclipse 适配器工厂实现
【发布时间】:2015-09-07 22:29:10
【问题描述】:

我是 Eclipse 适配器概念的新手。不过我在 Eclipse RCP 方面确实有一些经验。

我在互联网上搜索以了解有关 Eclipse 适配器模式的想法。 我知道它将一个对象转换为另一个对象。特别是我理解的是, 如果我们同时检查对象引用(Adapter 和 Adaptable),它将是相同的(我的理解,如果我错了,请纠正我。)。 我在互联网上看到一篇文章,将 Apple 转换为 Orange。

https://dzone.com/articles/eclipse-adapters-hand-hand-hol

它不包含完整的源代码。所以我开始以自己的方式实施。 我陷入了 AdaptorFactory 类的getAdapter(Object adaptableObject, Class<T> adapterType) 方法中。 我很困惑实现 getAdapter(adaptable,adapter) 方法。

【问题讨论】:

    标签: design-patterns eclipse-plugin eclipse-rcp adapter


    【解决方案1】:

    getAdapter 通常不用于创建新对象。相反,它用于访问源对象包含的一些现有对象。

    源对象通常是一个用户界面对象——可能是树结构的一个节点,请求的类型类似于该节点所代表的文件。

    public class TreeNodeFactory implements IAdapterFactory {
    
        private static final Class<?>[] adapterList = { IFile.class };
    
        @Override
        public <T> T getAdapter(Object sourceObject, Class<T> adapterType) {
            if (adapterType == IFile.class) {
                if (sourceObject instanceof TreeNode) {
                    return (T) ((TreeNode)sourceObject).getFile();
                }
            }
            return null;
        }
    
        @Override
        public Class<?>[] getAdapterList() {
            return adapterList;
        }
    }
    

    请注意,这里我调用了一个TreeNode.getFile 方法,该方法将返回节点所代表的IFile

    使用getAdapter意味着调用代码不需要知道任何关于TreeNode的信息,它可以要求一个IFile

    【讨论】:

    • 嗨非常感谢您提供的信息,但我仍然不太清楚,在 AdaptorFactory 类的 getAdapter(adaptable,adapter) 方法中,如果我想获得一个现有的(橙色)对象,我以哪种方式必须写吗?你能给我提示吗?我期望以以下方式。苹果苹果 = 新苹果();橙橙 = (Orange) apple.getAdapter(Orange.class);
    • AdaptorFactory类的当前实现getAdapter(adaptable,adapter)方法对吗?因为它总是创建新对象。如何重写可以重用获取橙色对象的代码?如果您也能说出这一点,那将非常有帮助。
    • 你必须像我在我的例子中所做的那样,为你做类似((Apple) sourceObject).getOrange()的事情,你必须在Apple中写一个getOrange方法
    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多