基于Eclipse开发初识(一)

           最近做基于Eclipse的开发,写写对基于Eclipse的开发一些体会。以前一直在用Eclipse,感觉到插件机制的强大和灵活性,但一直没有接触到Eclipse的开发。现在写代码基本上模仿+现学现卖,Eclipse Plugin开发首先就应该学会模仿(我老大常说的一句Monkey see monkey do,《Contributing to Eclipse》的一条rule),因为Eclipse除了Run-time Kernal外都是插件(Everything is a contribution),所以要习惯从已有的contributions来学习,许多时候我们要读Eclipse的源代码,其实读源代码是学习的一个很好的途径,事实上Eclipse灵活的设计凝聚了设计模式大师Erich Gamma的许多优秀的模式思想(看过Erich Gamma作品《设计模式-可复用的软件基础》和JUnit代码的人都为模式带来的灵活和优美感到震惊,Eclipse同样也是)。

         Eclipse开发的基础是SWT和JFace,SWT/JFace是和awt/swing对应的东东,其实熟悉awt/swing开发的人很容易过度到SWT/JFace的开发,事件机制,UI组建、布局管理器也基本类似,SWT使用UI组件提供了更一致的编程风格(构造函数都是是parent,style,不需要显式的添加,一种更方便的Composite模式的构建树形结构的方式),SWT的事件机制底层是直接对Windows事件机制的一种封装(windows下版本而言),熟悉Windows编程的,很容易理解他的事件机制,这也是和Swing的区别,SWT中的非UI线程是不能够访问UI线程的资源的,需要使用 asyncExec,syncExec,timerExec方法开辟一个线程,这个线程交给UI线程来调用,而Swing提供了一种更直观的编程模型,非有UI线程可以访问直接UI线程的。SWT的布局管理器一般通过Layout来定义结构,用layoutData来定义组件的大小,可扩展方式等。JFace实际上是构建在SWT基础之上的粒度更大的,更具有MVC的UI组件。JFace 使用LabelProvider和ContentProvider将模型接口适配成Viwer可以呈现的方式,从而Model和UI的到了彻底的分离。Model和UI分离,Model不被UI所污染是所有UI设计都需要遵循的,Eclipse更是如此。

     Eclipse使用了大量的设计模式,核心模式Extension Object/Extension Interface,让Eclipse在保持API稳定的情况下,能够添加新的接口。Extension Object要达到的效果是:(1)向已有的服务接口添加类型而又不暴露它(2)向已有的类型添加行为。其实现方式是向已有的对象注册支持的类型,使用者可以query到已注册的类型,就像这个类动态的继承了一个接口,支持一个新的接口一样,“可以在运行时添加为一个对象添加接口”。这和COM组件的核心思想一样的。记得Bob大叔在《敏捷开发原则、模式、实践》这本书上就指出了可扩展的几个设计模式:Visitor、Decorator和 Extension Object模式。Visitor是在不改变原来结点类的情况下为结点添加行为、Decorator模式是可以在运行时为对象添加行为。Adapter模式也是Eclipse里面用的比较多的,像前面说的LabelProvider和ContentProvider.Proxy模式是Eclipse Lazy load的核心,Lazy load的实现一般是一个虚拟代理,常常为了效率而使用它(如Hibernate 的Lazy load)。Poxy有很多种,还有如远程代理等,Poxy的目的主要是控制对一个对象的访问,提供安全控制,屏蔽底层细节。

   Eclipse plugin开发、EMF、GMF待续。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页