`

基于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待续。

1
0
分享到:
评论
2 楼 defrag_sly 2008-10-20  
je里面关心eclipse技术的人不多。跟你认识下。有问题大家一起研究。
1 楼 xh19840213 2008-06-24  
用了这么久的eclipse还没发现这么多,行阿,老连。

相关推荐

    XFire初识-使用Eclipse开发WebService

    基于eclipse中XFire的webservice项目源码!

    android开发入门教程

    1.3.1 开发基于Android平台的应用 1.3.2 参加Android开发者大赛 1.3.3 个人英雄主义再现——得到更多人的认可和尊重 1.3.4 获得应有的收益——AndroidMarket 1.4 真实体验——Android模拟器 1.4.1 模拟器概述 1.4.2 ...

    android开发入门与实战(下)

    1.3.1 开发基于Android平台的应用 1.3.2 参加Android开发者大赛 1.3.3 个人英雄主义再现——得到更多人的认可和尊重 1.3.4 获得应有的收益——AndroidMarket 1.4 真实体验——Android模拟器 1.4.1 模拟器概述 1.4.2 ...

    Jigloo 开发 Swing 的入门教程

    III. 将基于 Swing 的开发工具插入Eclipse 中 12 假定的 Swing 编辑器:Ed 14 基本概念 14 编辑器集成 15 准备插件项目 15 插件清单文件 15 集成 Ed 源代码 16 编辑器启动程序(launcher) 17 双向传递(round-...

    android开发入门与实战(上)

    1.3.1 开发基于Android平台的应用 1.3.2 参加Android开发者大赛 1.3.3 个人英雄主义再现——得到更多人的认可和尊重 1.3.4 获得应有的收益——AndroidMarket 1.4 真实体验——Android模拟器 1.4.1 模拟器概述 1.4.2 ...

    Google.Android开发入门与实战

    作为一本既及时、又翔实、理论实践相结合的教程,《Google Android开发入门与实战》一书很值得入门者阅读。  值得一提的是,书中的开发实例很有创意,将传统互联网的内容/服务与移动平台紧密结合起来,如书中的...

    Android开发微信小程序页面的图文教程

    Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。大概就是一个开发工具。 项目介绍 我们会首先建立大概...

    《Google Android开发入门与实战》.pdf

    第14章 android综合案例三——基于android的豆瓣网(web 2.0)移动客户端开发 260 14.1 关于豆瓣网和豆瓣网api 260 14.1.1 豆瓣网介绍 260 14.1.2 豆瓣网api介绍 261 14.1.3 豆瓣网api认证 261 14.1.4...

    Google Android开发入门与实战的代码

    1.3.1 开发基于Android平台的应用 3 1.3.2 参加Android开发者大赛 3 1.3.3 个人英雄主义再现——得到更多人的认可和尊重 3 1.3.4 获得应有的收益——Android Market 3 1.4 真实体验——Android模拟器 ...

    Android典型技术模块开发详解

    1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK 1.2.3 配置源代码 1.2.4 创建AVD 1.3 Android模拟器 1.3.1 ADB工具 1.3.2 其它常用工具 1.4 本章小结 第2章 应用程序构建 2.1 创建Android工程 2.2 Hello...

    Android入门到精通源代码.

    2.5 使用Eclipse开发Android应用程序 2.5.1 使用Eclipse创建Android项目 2.5.2 Eclipse中Android项目架构 2.5.3 Eclipse中Android项目的调试和运行 第3章 Android中的Activity 3.1 Activity的作用 3.2 单Activity的...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    Activiti6.0教程例子下载

    1. 初识Activiti 1.1. 工作流与工作流引擎 工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。它主要解决的是“使在...

    基于j2ee的ajax宝典

    1.6.10 安装Eclipse开发环境······ 28 1.6.11 在线安装········ 29 1.6.12 手动安装········ 30 1.7 小结········· 31 第2章 Ajax初体验···· 32 2.1 Ajax带来的优势······...

Global site tag (gtag.js) - Google Analytics