Eclipse GEF4 Common

由于eclipse提供了对GEF4的支持与发展,GEF慢慢会淡出历史舞台,由于资料有限,只得从官网摘录下信息。

The Common module of GEF4 Common provides basic abstractions and related support classes within the following packages:

Common模块提供了一些基本抽象类和与之相关的支持类,这些类在下面的package中:

Activate: A general abstraction for activatable objects and a related support class
激活类:对可激活对象与相关支持类的一般抽象。

Activate

Activate包为那些维护激活状态 (IActivatable)的对象和一些支持类(ActivatableSupport) 提供了一般抽象,这些支持类作为一种委派,可以轻易地实现IActivatable接口。
Eclipse GEF4 Common_第1张图片

如果实体实现了IActivatable接口,那么就认为这个类是就具有激活、关闭的、是否激活的功能,并且有一个ACTIVE_PROPERTY变量维护了当前的激活状态。另外,从图中可以看出,设计者为IActivatable接口添加IPropertyChangeNotifier了功能,IPropertyChangeNotifier是属性变化通知器,这个接口是为了使实现类具有注册属性监听器、解注册监听器的功能,并对属性转变做出通知。为了方便实现相关功能,一般都是使用java.bean包的PropertyChangeSupport类作为委托的,我们使用的属性监听器PropertyChangeListener也是存在于java.bean包中,其中对bean属性转变已经封装的很好,可以作为监听者模式的典型应用。

ActivatableSupport类主要管理实现了IActivatable接口的对象源,也就是说一个对象如果具有IActivatable功能,那我们就可以用ActivatableSupport来进行维护,故ActivatableSupport类存在一个IActivatable的引用。我们还能观察到,ActivatableSupport实现了IActivatable的所有方法,且其中包含了激活状态、可激活对象源、属相变化支持类。对于ActivatableSupport类,它用如下方法实现了:

//成员变量
    private boolean isActive = false;
    private IActivatable source;
    private PropertyChangeSupport pcs;
//激活方法
public void activate() {
        if (!isActive) {
            isActive = true;
            pcs.firePropertyChange(IActivatable.ACTIVE_PROPERTY, false, true);

            // activate all adapters, if the IActivatable is also an IAdaptable
            activateAdapters();
        }
    }


//注销
    public void deactivate() {
        if (isActive) {
            // deactivate all adapters, if the IActivatable is also an
            // IAdaptable
            deactivateAdapters();

            isActive = false;
            pcs.firePropertyChange(IActivatable.ACTIVE_PROPERTY, true, false);
        }
    }

当发生激活与关闭时,实际上触发了PropertyChangeListener的propertyChange,具体事件是由IActivatable.ACTIVE_PROPERTY常量决定的,这种设计思想即把PropertyChangeSupport作为事件监听和处理的核心单独抽离出来,可以随时为我们所用,我们唯一要做的就是获得这个引用,确定事件种类,余下的就全权交给PropertyChangeSupport去处理。

接上文ActivatableSupport还有适配器的维护。

    private void activateAdapters() {
        if (source instanceof IAdaptable) {
            for (IActivatable adapter : ((IAdaptable) source)
                    .<IActivatable> getAdapters(IActivatable.class).values()) {
                adapter.activate();
            }
        }
    }

    private void deactivateAdapters() {
        if (source instanceof IAdaptable) {
            for (IActivatable adapter : ((IAdaptable) source)
                    .<IActivatable> getAdapters(IActivatable.class).values()) {
                adapter.deactivate();
            }
        }
    }

如果可激活对象也是可适配对象,同样激活这些适配对象,对适配对象的说明,在下一节会介绍。

//官网给的例子
public class MyActivatable implements IActivatable {

  // create delegates
  private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
  private ActivatableSupport acs = new ActivatableSupport(this, pcs);

  public void activate() {
    acs.activate();
  }

  ...
}

你可能感兴趣的:(eclipse,gef)