GEF学习笔记(二) 模拟GEF设计思路,解剖GEF 1

GEF如同其他的一些framework一样,是一个复杂庞大(有点夸张)的,当我们想使用驾驭它时,就必须全面的理解其整体构架及其运作过程。这需要我们的毅力和敏锐。旅途开始了….

GEF主要的任务是针对2D图形编辑操作,如下图。

为了使GEF能够广泛的用于种类繁多2D图形编辑领域,GEF就必须建立一个严格的易扩充/易组合/易重用的MVC框架(当然这种分解细化功能对象的方法思想,我们可以用在其它的地方,其它领域、其他语言如C#上)。

那么如果设计 这个 严格的MVC框架(对于Model是严格的独立,它不依赖与View和Controller) 以及 此框架 如何 达到 易扩充/易组合/易重用 的特性。下面我按照自己拙劣的思路,以麻雀之眼度鸿雁之志啦

对于MVC中

View部分:GEF理所当然要使用自家的东东Draw2D。利用Draw2D的Figuer作为自己的View。

Model部分:往往内部包含了千差万别、不可预知的商业信息。因此、GEF框架应该尽量减少约束(在下面将详细说明约束)。

Controller部分:EditPart/Draw2D的Figure/Model这三个树状对象模型,在EditPart中将建立了与其对应的Draw2D的Figure/Model结点 建立一一关联的关系。

这样产生的构架如下:

思考:

为什么Controller要同View一样采用树状结构呢?

当Controller以树状的形式存在,这样便于功能分解(这个道理有点像 在类设计中 复合优于继承 一般)

这样每一结点的Controller(即EditPart) 仅需要处理

自身逻辑功能

管理子Controller

必要时通知父Controller

尤其当用户需要在图形界面编辑界面中,需要使用多种不同UI行为规则的2D元素(例如不同的形状块,不同行为的连线等)组合来完成工作时(例如类似Visio这样的界面),这种构架的优势就显露无疑。

未完待续….(下面要探讨如何产生上述三个树状模型等。)

时间: 2024-10-25 22:38:46

GEF学习笔记(二) 模拟GEF设计思路,解剖GEF 1的相关文章

C#学习笔记(二)

笔记 C#学习笔记(二) write by cash(天下第七)2002.01.20版权所有,翻录不究cashcao@msn.com 选择 我身上携带着精神.信仰.灵魂 思想.欲望.怪癖.邪念.狐臭它们寄生于我身体的家 我必须平等对待我的每一位客人-----------伊沙:<原则> 我的名字是cash,所以我很功利主义:我的星像是Leo,所以我很大男人主义:我的语言是C#,所以我有点儿拿不定主义. /* 你能看得出来,这不是一篇正规的技术文章,所以若你不小心从里边读到了一个爱情故事,可不要奇

kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1289627 KVM虚拟化学习笔记系列文章列表 ---------------------------------------- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51cto.com/703525/1288795 kvm虚拟化学习笔记(二)之linuxkvm虚拟机安装htt

学习笔记之JAVA图形设计卷I AWT——第3章 图 形

   学习笔记之JAVA图形设计卷I AWT--第3章 图 形 前时显示器坏了,file://写前言:我觉得写的不是学习笔记,倒象教程.我是想让有所获,故详细了点.注意1:在AWT中提供的用户接口构件(如按钮.列表.菜单.对话框等)不包含一些类似的纯粹的绘制图形的对象(如Line或Circle类) 详细意思:由于原始的AWT在设计时不允许纯粹的绘制图形的对象,那么Rectangle.Polygon和Point没有任何绘制图形的能力.换句话说,Rectangle.Polygon和Point不具备d

Bootstrap3学习笔记(二)之排版_javascript技巧

在上篇文章给大家介绍了BootStrap3学习笔记(一)之网格系统 对于标题,Bootstrap已经修改了h1--h6的样式,如果需要副标题,还可以在其中使用small标记 <h1>h1. Bootstrap heading <small>Secondary text</small></h1> <h2>h2. Bootstrap heading <small>Secondary text</small></h2>

GEF学习笔记(一) eclipse的GEF相关项目说明

首先.感谢八进制的辛勤劳动和奉献.这几天开始对GEF发生兴趣,八进制的GEF系列对我学这些的帮助很大入门很快.自己也就顺手把周末学习的东西记录下来.帮助后来学人.我会把这几天所学陆续写出希望大家支持.目前.正在为八进制例子发愁,我对NodePart增加了ResizeEditPolicy,但是不知为何鼠标拖动时有个灰色的区域在随着变化,但鼠标释放时,NodeFigure的尺寸不发生变化,是否是因为在refreshVisuals中固化了Size,代码学习中-. eclipse的GEF相关项目说明.

MyBatis学习笔记(二)之关联关系_java

今天主要学习的关联关系是一对一关系与一对多关系. 一.一对一关系 还是通过例子来解释说明.(一个妻子对应一个丈夫). 1)数据库信息 create table t_wife( id int primary key auto_increment, wife_name varchar(), fk_husband_id int ); create table t_husband( id int primary key auto_increment, husband_name varchar() );

Java的“对象思想”学习笔记[二]

笔记|对象 在这篇文章里我将介绍一些Java对于对象的基本处理模式的问题. 首先看一个有关对象相等性(Object equivalence)的例子: 先看下面的代码: public class EqualTest1{ public static void main(String[] args){ Integer n1 = new Integer(20); Integer n2 = new Integer(20); System.out.println(n1 = = n2); System.out

Hadoop学习笔记二 安装部署

硬件环境 共有3台机器,均使用的FC5系统,Java使用的是jdk1.6.0.IP配置如下: dbrg-1:202.197.18.72 dbrg-2:202.197.18.73 dbrg-3:202.197.18.74 这里有一点需要强调的就是,务必要确保每台机器的主机名和IP地址之间能正确解析. 一个很简单的测试办法就是ping一下主机名,比如在dbrg-1上ping dbrg-2,如果能ping通就OK!若不能正确解析,可以修改/etc/hosts文件,如果该台机器作Namenode用,则需

kvm虚拟化学习笔记(二十一)之KVM性能优化学习笔记

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1606422 本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6.x系列操作系统下KVM优化的点,有很多都是默认支持开启了的,除了采用virtio方式的磁盘IO,与网络IO接口

kvm虚拟化学习笔记(二十)之convirt安装linux系统

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1306526 情况说明: (1)本文接前文kvm虚拟化学习笔记(十九)之convirt集中管理平台搭建,采用convirt虚拟化平台安装linux操作系统的过程,这个过程中需要对convirt进行一系列的配置才能真正的使用convirt来实现管理.(2)convirt2.1.1是一套kvm/xen虚拟机管理工具,该管理工具