注:本文为译文,原文出处Eclipse Design Patterns – Proxy and Bridge in Workspace
核心工作空间内最重要的两个设计模式就是:”代理模式与桥接模式”, 最令人疑惑的就是这两个模式分别作用于哪部分.
下图通过IResource进行了演示, 与之相似的有:IFile, IFolder, IProject, IWorkspaceRoot等等.
在一个工作空间内, 每一个resource都通过handle表示. handle动作就像指向resource的钥匙. Handle都是些小型对象, 并且一旦创建就不会改变.
Resource是ResourceInfo的代理. 每一个对ResourceInfo的情况都会通过它的代理Resource进行处理.
Resource是IResource的具体实现. 由于一个handle只有一个实现, 因此这就是所谓的简单的桥接.
代理: 如果所有A的行为都通过B来完成, 那么B就是A的代理. 这个描述可能不是很精确, 但它向我们解释了如何来理解这个类图.
桥接是类似于适配器模式. 在桥接模式中, 我们定义了抽象接口与基本的实现. 我们并不想适配任何接口. 正常情况下会有多个实现, 而不像例子中仅有一个.
将此处用到的设计模式与你所知的设计模式对应起来并不是很重要, 因为他们并不明显. 理解它是如何工作的则更有用处.
下面的代码样例可以说明模式是如何工作的.
IResource resource=ResourcesPlugin.getWorkspace().getRoot().findMember(path);
if (resource == null) {
return null;
}
IJavaElement javaElement=JavaCore.create(resource);
if (javaElement == null) {
return null;
}
return javaElement;
值得一提的是, JDT中的Java模型也应用的同样的设计模式.