WEB开发网
开发学院软件开发Java GEF 框架中的设计模式 阅读

GEF 框架中的设计模式

 2010-06-07 00:00:00 来源:WEB开发网   
核心提示: 查看原图(大图)EditPart 实例对象的创建则运用了抽象工厂模式,所有的 EditPart 均由 EditPartFactory 的子类负责创建,GEF 框架中的设计模式(4),GEF 自身就提供了 RulerEditPartFactory 和 PaletteEditPartFactory

查看原图(大图)

EditPart 实例对象的创建则运用了抽象工厂模式。所有的 EditPart 均由 EditPartFactory 的子类负责创建,GEF 自身就提供了 RulerEditPartFactory 和 PaletteEditPartFactory 两个工厂实现。如果用户自定义 EditPart,必须提供相应的 EditPartFactory 类型才能正确创建用户的 EditPart 对象。

图 4. EditPartFactory 相关类图 (images/EditPartFactory.jpg)
GEF 框架中的设计模式

工厂方法和抽象工厂之间的区别在于,工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

观察者 (Observer)

观察者模式是一种对象行为型模式,它可以定义对象间的一种一对多的依赖关系,当被依赖对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

通过选项栏创建连接时,ConnectionCreationTool 工具被生成用来创建连接,它通过监听鼠标的按下动作来设置连接的连接源,在设置连接源时,通过 addEditPartListener 方法为源 EditPart 添加 deactivationListener 监听。

清单 1. AbstractConnectionCreationTool 类中部分代码

 package org.eclipse.gef.tools; 
 
 public class AbstractConnectionCreationTool 
 extends TargetingTool{ 
  ...... 
 
  private EditPartListener.Stub deactivationListener = new EditPartListener.Stub() { 
 public void partDeactivated(EditPart editpart) { 
   handleSourceDeactivated(); 
 } 
  }; 
 
  protected boolean handleButtonDown(int button) { 
 if (isInState(STATE_INITIAL) && button == 1) { 
  updateTargetRequest(); 
  updateTargetUnderMouse(); 
  setConnectionSource(getTargetEditPart()); 
  Command command = getCommand(); 
  ((CreateConnectionRequest)getTargetRequest()).setSourceEditPart( 
  getTargetEditPart()); 
  if (command != null) { 
   setState(STATE_CONNECTION_STARTED); 
   setCurrentCommand(command); 
   viewer = getCurrentViewer(); 
  } 
 } 
 
 if (isInState(STATE_INITIAL) && button != 1) { 
  setState(STATE_INVALID); 
  handleInvalidInput(); 
 } 
 return true; 
  } 
 
  protected void setConnectionSource(EditPart source) { 
 if (connectionSource != null) 
   connectionSource.removeEditPartListener(deactivationListener); 
 connectionSource = source; 
 if (connectionSource != null) 
   connectionSource.addEditPartListener(deactivationListener); 
  } 
 
  protected void handleSourceDeactivated() { 
 setState(STATE_INVALID); 
 handleInvalidInput(); 
 handleFinished(); 
  } 
 } 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:GEF 框架 设计模式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接