Eclipse 适配器工厂实现
Eclipse adapter factory implementation
我是 Eclipse 适配器概念的新手。但是我确实有一些 Eclipse RCP 的经验。
我在互联网上搜索以了解有关 Eclipse 适配器模式的想法。
我想到它将一个对象转换为另一个对象。特别是我理解的是,
如果我们同时检查对象引用(Adapter 和 Adaptable),它将是相同的(我的理解,如果我错了请纠正我。)。
我在网上看到一篇文章说把苹果改成橙子。
https://dzone.com/articles/eclipse-adapters-hand-hand-hol
它不包含完整的源代码。所以我开始以我自己的方式实施。
我陷入了 AdaptorFactory class 的 getAdapter(Object adaptableObject, Class<T> adapterType)
方法。
我对实现 getAdapter(adaptable,adapter) 方法感到困惑。
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
方法,该方法将 return 节点代表的 IFile
。
使用getAdapter
意味着调用代码不需要知道任何关于TreeNode
的信息,它可以只要求一个IFile
.
我是 Eclipse 适配器概念的新手。但是我确实有一些 Eclipse RCP 的经验。
我在互联网上搜索以了解有关 Eclipse 适配器模式的想法。 我想到它将一个对象转换为另一个对象。特别是我理解的是, 如果我们同时检查对象引用(Adapter 和 Adaptable),它将是相同的(我的理解,如果我错了请纠正我。)。 我在网上看到一篇文章说把苹果改成橙子。
https://dzone.com/articles/eclipse-adapters-hand-hand-hol
它不包含完整的源代码。所以我开始以我自己的方式实施。
我陷入了 AdaptorFactory class 的 getAdapter(Object adaptableObject, Class<T> adapterType)
方法。
我对实现 getAdapter(adaptable,adapter) 方法感到困惑。
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
方法,该方法将 return 节点代表的 IFile
。
使用getAdapter
意味着调用代码不需要知道任何关于TreeNode
的信息,它可以只要求一个IFile
.