28 Aug 2014

Eclipse设计模式:工作空间内的代理与桥接模式

注:本文为译文,原文出处Eclipse Design Patterns – Proxy and Bridge in Workspace

home-core-workspace

1. 核心工作空间内的代理与桥接模式

核心工作空间内最重要的两个设计模式就是:”代理模式与桥接模式”, 最令人疑惑的就是这两个模式分别作用于哪部分.

下图通过IResource进行了演示, 与之相似的有:IFile, IFolder, IProject, IWorkspaceRoot等等.

IResource - Proxy and Bridge

在一个工作空间内, 每一个resource都通过handle表示. handle动作就像指向resource的钥匙. Handle都是些小型对象, 并且一旦创建就不会改变.

Resource是ResourceInfo的代理. 每一个对ResourceInfo的情况都会通过它的代理Resource进行处理.
Resource是IResource的具体实现. 由于一个handle只有一个实现, 因此这就是所谓的简单的桥接.

代理: 如果所有A的行为都通过B来完成, 那么B就是A的代理. 这个描述可能不是很精确, 但它向我们解释了如何来理解这个类图.
桥接是类似于适配器模式. 在桥接模式中, 我们定义了抽象接口与基本的实现. 我们并不想适配任何接口. 正常情况下会有多个实现, 而不像例子中仅有一个.

将此处用到的设计模式与你所知的设计模式对应起来并不是很重要, 因为他们并不明显. 理解它是如何工作的则更有用处.

2. 代码样例

下面的代码样例可以说明模式是如何工作的.

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模型也应用的同样的设计模式.


Tags:
0 comments