﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-xdingding-随笔分类-GEF源码分析</title><link>http://www.blogjava.net/xdingding/category/5616.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:59:02 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:59:02 GMT</pubDate><ttl>60</ttl><item><title>[导入]GEF源码分析（六） GEF 的EditPart的职能分离 __ 跨国时尚媒体集团广告部门 的故事 二</title><link>http://www.blogjava.net/xdingding/archive/2005/12/08/22929.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Wed, 07 Dec 2005 16:41:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/08/22929.html</guid><wfw:comment>http://www.blogjava.net/xdingding/comments/22929.html</wfw:comment><comments>http://www.blogjava.net/xdingding/archive/2005/12/08/22929.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/xdingding/comments/commentRss/22929.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xdingding/services/trackbacks/22929.html</trackback:ping><description><![CDATA[&nbsp;<BR>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">GEF源码分析（六） GEF 的EditPart的职能分离 __ 跨国时尚媒体集团广告部门 的故事 二<BR><BR>GraphicalEditPart先生当天安排了部门及会议计划。经过</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门紧张有奏的准备会议讨论的资料，第三天、按时</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">8:30</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">开会。<BR></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><BR>GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生还如往常，准时提前</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">5</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">分钟坐在会议室前边角上。他喜欢部门的小伙子们，虽然这些小伙子们做事情时常有些不周，但是他更欣赏他们的活力和富有创造激情。所以、每每开会时，他更愿坐在旁边听这些小伙子们的意见，“相比较当个威武的军队长官，我更意是一个严格又和蔼的优秀教练”</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生常常如此提醒自己不要越俎代庖。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门干将小李主持会议，简短阐明会议主题和要求后，（为了提高会议效率会议每人最多</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">5</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">分钟发言，最后</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">20</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">分钟讨论时间，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">5</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">分钟</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生做总结）。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小王首先站起发言：“目前我们</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门，虽然，主要任务有明确定义，但是内部的工作流程不明确，没有可依章程。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">...</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">”。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“是呀，公司目前还没有我们部门的标准操作手册，很多问题都有很大随机性，工作的好坏过于依赖人员本身的工作能力，这十分不利于人员的内部流动以及新人员的补充”我们的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart"</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">教练</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">"</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">满意的点点头。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">小魏起来补充一下：“由于我们内部每个人的做事方法，都是各有一套绝活，流程不一致，经常导致在工作对上下层通知协作出现问题。在水平部门沟通时，也常常不流畅”。这是个大学刚毕业十分活泼的小姑娘。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“为什么大家总是觉得女的职员不好，看多有灵气的一个小姑娘呀，又是个好苗子。”</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart"</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">教练</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">"</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">此时内心中的自我形象简直就是华佗再世，那感觉真有点飘飘然乎，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生不由自主地晃了晃脑袋。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">接下来其它人纷纷发言：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“工作经验很难相互交流，积累与提高。很难在部门级对工作流程等进行优化，缺乏专业化。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“我们经常要和</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门一起工作，跟踪操作执行。这很是浪费工作时间，尤其是当某个工作需要很长时间，或者中间经常需要和客户交流反馈一段时间，这样非常影响工作效率。”</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“对于客户的问题很难快速根据现有的经验模式形成解决方案，虽然我们公司服务态度和广告质量高于其它公司，但是经常由于反应速度太慢，活被其它公司从中抢了去，销售部门常常抱怨我们部门速度太慢。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“公司在相应客户需要操作过程中，很难针对客户某个需求重新调整。客户常常抱怨在制作过程中很难做些小的改动。”</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1">……</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">由于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生管理小师的带领，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门的会议总是简短有效。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">1</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">个小时多几分钟大家都把问题简明扼要的表达出来。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小李环顾下四周“最后，由</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长总结一下今天的会议”。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一直沉默的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生站了起来，十分精神，也环顾了一下四周，清了清嗓子。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“首先、我要自我检讨一下，这一年多总是忙乱于紧急的小事情当中，很久没有收集大家的建议和反馈了，这十分不利于我们部门的发展。今天大家举出很多目前部门的问题，这些充分反映了大家对部门的业务熟悉程度，我相信，这是因为大家十分关注公司的未来，希望公司越办越好，而不是怨天尤人的牢骚，可能有些领导会觉的这是找毛病对领导不满，在我这里，我今天在一次明确表明，我十方鼓励大家，欢迎大家将一些意见反馈给我，希望大家不仅仅是简单反馈在工作中的直接困难，而且经过自己的思考提炼写成简洁的文书给我，最好发挥自我主动和创造性提出一些变革建议。这些东西将是我们部门及公司潜在的珍贵的财富，同时也是我们部门未来发展方向的一个重要部分。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“今天的会议大家主要是针对我们部门的问题，希望会后大家再从公司整体考虑这些问题，以及未来扩充</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门会带来什么问题，比如大家可以参考我们当初成立时遇到那些问题，这些问题将来如何避免或减少。”</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“按计划，会后，小李，小孙，小丁，小黄还有我，将总结今天会议，同时、制定出未来部门组织变革的策略。在此期间，希望大家踊跃的将自己的想法创意于我们交流。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“还有一件事情，今天要批评一下小丁同事，现在开会不迟到了，但是，不仅没发言、我看你从开会就一直看前天发的材料，为什么不提前准备，这是耽误大家每个人的时间，下不为例。今后、小李你在部门规章里加一条，部门开会前必须提前阅读理解会议材料，凡违反者，包括我在内一律站到会议室角落站着阅读完资料后，在回会议座位。我的话完了。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">小丁满脸通红，不由地低着头，双手捂住了腮帮，不敢喘气了，恨不得有个地缝钻进去。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“今天会议结束。”小李宣布。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">会后根据小孙的会议记录，很快的小李几个人总结出以下的一个鱼骨图。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;<IMG src="http://www.cnblogs.com/images/cnblogs_com/xdingding/Gef-BlogWeb.gif" border=0></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"><BR>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"><BR>&nbsp;<IMG src="http://www.cnblogs.com/images/cnblogs_com/xdingding/icon1.gif" border=0></P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">什么是因果图？</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">因果图的发明者 Kaoru Ishikawa 是一名管理专家，其最初的目的是改进车间的质量控制工作。正如以下示例所示，因果图还能表达其他环境中的因果关系。<BR><IMG src="http://www.cnblogs.com/images/cnblogs_com/xdingding/ZA010359992052.gif" border=0><BR>&nbsp; </P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">由于因果图的形状很像鱼的骨架，所以它又称作鱼骨图。鱼的脊骨上几根最大的鱼骨表示主要的原因类别。<BR>例如，在本例中，主要的原因类别有盎格鲁人/朱特人、丹麦人、萨克逊人和诺曼底人，这些种族群体都想控制英格兰，从而导致了该战争的爆发。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">主要类别中的较小鱼骨表示主要的原因。例如，在本例中，在萨克逊人这个类别方面，黑斯廷斯战争的主要原因在于公元 1051 年萨克逊王爱德华许诺将王位传给威廉一世。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">您还可以在主要原因上添加次要原因。</P><IMG height=1 src="http://xdingding.cnblogs.com/aggbug/292516.html" width=1><BR><BR>
<DIV align=right>般若菩提 2005-12-07 14:14 </DIV><BR>文章来源:<A href="http://xdingding.cnblogs.com/archive/2005/12/07/292516.html">http://xdingding.cnblogs.com/archive/2005/12/07/292516.html</A><img src ="http://www.blogjava.net/xdingding/aggbug/22929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-08 00:41 <a href="http://www.blogjava.net/xdingding/archive/2005/12/08/22929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（五） GEF 的EditPart的职能分离 __ 跨国时尚媒体集团广告部门 的故事</title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22555.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22555.html</guid><wfw:comment>http://www.blogjava.net/xdingding/comments/22555.html</wfw:comment><comments>http://www.blogjava.net/xdingding/archive/2005/12/05/22555.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xdingding/comments/commentRss/22555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xdingding/services/trackbacks/22555.html</trackback:ping><description><![CDATA[<BR><A class=titlelink id=Editor_Results_rprSelectionList__ctl2_Hyperlink1 href="http://xdingding.cnblogs.com/archive/2005/12/05/290704.html"><FONT color=#000000>GEF源码分析</FONT></A>（五） GEF 的EditPart的职能分离 __ 跨国时尚媒体集团广告部门 的故事<BR><BR><SPAN style="FONT-SIZE: 10pt">&nbsp; 
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"><SPAN style="FONT-SIZE: 10pt">接下来我们以一个故事的方式来解决第三篇遗留下来问题：</SPAN></P></SPAN><SPAN style="FONT-SIZE: 10pt"><BR></SPAN>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; COLOR: #333399; FONT-FAMILY: SimSun; mso-outline-level: 1">已存在一个三角图形EditPart，我们想重用它,但是我们还需要增加（或删去）边框可调整的特性，如何保证无需重新建立一个新的EditPart，或者做出丑陋的继承，当功能不断组合后，出现无数子EditPart类? </P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN: 0in; COLOR: #333399; FONT-FAMILY: SimSun; mso-outline-level: 1">如何由框架自动完成Undo及Redo功能？</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><SPAN style="FONT-SIZE: 10pt">
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">话说在某个跨国时尚媒体集团中国区广告部门（这是一家主营平面广告的广告公司，听说董事长是个年仅办百的老头GraphicalEditor先生，来自赫赫有名的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">基金财团），有目前主要有两个子部门</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">广告策划部</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">和</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figuer(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">平面设计部</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长是一位中年充满信心和活力GraphicalEditPart先生。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figuer</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长是一位与部门名同名的广告主设计师美丽青春的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小姐。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长GraphicalEditPart目前主要肩负着三项任何：</SPAN></P>
<UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 1in; DIRECTION: ltr; unicode-bidi: embed" type=disc>
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 2"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">处理由其他部门中的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">人员送来各销售部门广告需求；</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 2"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">做出具体的平面设计策划交给</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小姐，由</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小姐负责画出充满激情的平面广告；</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 2"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">读阅客户要求与反馈的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">文书，这些文书是由</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（情报收集部门）收集客户的反馈及要求，经过专业的整理与分类而成（上篇我们以及探讨过了）</SPAN></LI></UL>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">由于公司扩大了业务，投入市场的产品种类比以往增加了三倍，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长工作变得异常繁忙有些快压垮了，感觉自己快成为整日驮着重物年迈的驴子，“是不是自己老了”GraphicalEditPart先生开始常常怀疑自己了。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这天，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长收到总部一封信：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">GraphicalEditPart先生：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; mso-outline-level: 2"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">首先我代表公司感谢您这些年勤奋出色的工作。我们公司在中国短短三年的营业额增长了四倍，同时</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中国部门在此期间获得了公司最有活力部门奖，这些成绩都与您的努力是分不开的。据我们了解，您在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门这三年中，实施了几项富有创意的制度改革，如成立</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">情报收集部门，推广后大大提高了整个公司</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门业务处理能力。为了进一步扩大业务，公司在未来的两年里将在世界各地尤其是中国增加</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">40%</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的区域广告部门，正如您所知道目前公司对于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门的组织规划以及责任制度还有很多不完善之处，这将十分不利于区域部门扩展的计划。故我委托您做出《未来广告部组织的规划》计划书，本月底将邀请您来总部参加组织规划与变革方案的评审会，届时将会对您的计划书进行评审。如通过评审，公司所有广告部将会按照您的计划书进行变革。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; mso-outline-level: 2"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">祝愿世界明天的舞台，因我们而变得更加美好、充满激情与想象</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">&nbsp;</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: Verdana; mso-outline-level: 3"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>CEO <SPAN style="FONT-STYLE: italic">GEF</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“噢！太棒了，这封信来的真是及时，如果再继续如此的话，我要压垮了，只好另谋它职了。嗯，这回我要好好地写这个计划书。这样，身上担子总算有减轻的希望。有上司的赏识，我要一展宏图一番。”GraphicalEditPart不由自主拍了下桌子自言自语后，张开双臂，砰地一下仰靠在椅背上，深深地出了口气，双目轻合工作的压力似乎片刻间消失，顺手戴上了他那十分酷毙的太阳镜，小声打开旁边</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">CD</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，噢，夏威夷之夜，感觉自己此时就在夏威夷带着墨镜躺在金黄、松软、温暖的沙滩，吹着口哨，热情似火的太阳穿过太阳镜，越过眼皮，将几缕模糊的光芒带入眼中（其实是他那高瓦的吊灯），海风习习（旁边的电风扇），在享受着这片刻宁静天堂感觉，激情创意不断涌出，啊，久违了的感觉。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">开干！迅速的打开他喜爱的脑图软件</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> -- Mindjet Manager</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，记录下脑中的构思，画下如下计划要点</SPAN></SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"><BR><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/部门规划.gif" border=0></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">看来GraphicalEditPart先生要大干一场，欲知详情，请听下回分解<IMG src="http://xdingding.cnblogs.com/Emoticons/emsmiled.gif" align=absMiddle border=0></SPAN></P><img src ="http://www.blogjava.net/xdingding/aggbug/22555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 14:01 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（四） GEF 消息转义 ___ Tool的作用</title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22553.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22553.html</guid><wfw:comment>http://www.blogjava.net/xdingding/comments/22553.html</wfw:comment><comments>http://www.blogjava.net/xdingding/archive/2005/12/05/22553.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xdingding/comments/commentRss/22553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xdingding/services/trackbacks/22553.html</trackback:ping><description><![CDATA[<BR>郁闷！同志们没有留言，不知是写的太差，何处需要改进，还是大家觉得对自己没有用处....&nbsp; <BR><BR>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF源码分析</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（四）</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GEF </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">消息转义</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> ___ Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的作用</SPAN></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun"><BR></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun"><FONT size=2>接着上一节：</FONT></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun"><FONT size=2>我们先解决如下问题：</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"><SPAN style="FONT-WEIGHT: bold; COLOR: rgb(51,51,153)">在界面操作过程中，我们希望面对的是边框调整事件，图形移动事件，或者是编辑文本事件，而不是原始的鼠标和键盘事件？</SPAN><SPAN style="COLOR: black"> </SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">术语定义：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">系统</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">事件：</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一般由某些计算机人机交互硬件发出信号，并且经操作系统理解后产生的事件，例如：原始的鼠标的移动、点击和键盘的敲击事件等。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">业务语义事件：</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: bold; FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">由系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件和其它</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件触发，由</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务代码理解后产生的事件（操作系统不可理解，同时无任何领域的业务语义），如</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的尺寸调整，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的点击，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的移动。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（其实不仅限于事件的转义，包括</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的改变，也需要由系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">语义转换到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义来使用）</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-2.jpg" border=0> 
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">控制中的优点是易于理解、维护和扩充，具体的主要有以下方面：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">a.</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">减少系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件判断逻辑部分代码的重复。比如在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部分代码无需分步着大量逻辑重复的代码，当鼠标移动时去判断究竟是一个</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的尺寸改变，还是一个</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的移动，还是一组</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的移动，还是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">DragAnd</SPAN><SPAN lang=EN-US style="FONT-FAMILY: SimSun">Drop</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的动作。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">b.Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部分的代码语义明确。在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: SimSun">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">内部处理代码和接口中直接面对的是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义，如图形的移动，图形的尺寸改变，这样、代码易于理解、调试等。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">b.Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部分代码无需为系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件保存状态。如</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的移动中，如果这些事件直接在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中处理，从开始</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MouseDown,</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MouseMove</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MouseUp</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">过程中，在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中要集中保留这样众多状态，极易造成</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">代码具体多头职责的症状，从而患上严重的精神分裂</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">:)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">于是乎</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">FrameWork</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">有给出以下的解决方案：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun"><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-7.gif" border=0></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">A</SPAN></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; COLOR: rgb(102,102,102); FONT-FAMILY: 宋体"><BR>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><BR><BR>如上图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">A</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">通过</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tools(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">根</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">interface</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，当然在视图上的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Menu</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">和</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Toolbar</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">是通过</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Action</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">发出，这个是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Workbench</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">机制，在此就不讨论了。以下是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的类继承树：</SPAN></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-6.gif" border=0> 
<P style="FONT-SIZE: 8pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">B<BR></SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><BR><BR>从上图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">B</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">可以看出</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">从</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">继承的这些类均处理一个或者一类</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件，其中需要保留中间状态的子类均以</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">XXXTracker</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">形式出现。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">首先这些</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的实现类通过</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的接口（上图右边），接收界面来的事件，然后调用内部</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">handleXXX</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，这样通过内部函数getTargetRequest</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">()[</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">create</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Target</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">Request()</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">]</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">和getSourceRequest()</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">createSourceRequest()</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">]</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，把系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件转换为</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件叫</SPAN><SPAN lang=EN-US style="COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: Verdana; TEXT-DECORATION: underline">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（如图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">C</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">）。至此</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">会通过调用相关联的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的接口将</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件通知到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中。于是在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller(EditPart)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中仅仅需要理解处理</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">对象。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><BR><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-8.gif" border=0>&nbsp; 
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">C</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">下面以</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">ResizeTracker</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">代码为例：</SPAN></P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class ResizeTracker</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected Request createSourceRequest() {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">ChangeBoundsRequest request;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">request = new ChangeBoundsRequest(REQ_RESIZE);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">request.setResizeDirection(getResizeDirection());</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">return request;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected Command getCommand() {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">List editparts = getOperationSet();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">EditPart part;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">CompoundCommand command = new CompoundCommand();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">command.setDebugLabel("Resize Handle Tracker");//$NON-NLS-1$</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">for (int i = 0; i &lt; editparts.size(); i++) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">part = (EditPart)editparts.get(i);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">command.add(part.getCommand(getSourceRequest()));</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">return command.unwrap();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected void eraseTargetFeedback() {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">if (!getFlag(FLAG_TARGET_FEEDBACK))</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">return;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">if (getTargetEditPart() != null)</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">getTargetEditPart().eraseTargetFeedback(getSourceRequest());</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">setFlag(FLAG_TARGET_FEEDBACK, false);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected boolean handleButtonUp(int button) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">if (stateTransition(STATE_DRAG_IN_PROGRESS, STATE_TERMINAL)) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">eraseSourceFeedback();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">eraseTargetFeedback();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">performDrag();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">return true;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">最后还有个问题是<BR></P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(51,51,153)"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><IMG height=50 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-2.jpg" width=50 border=0><BR>Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这些事件接口，如何从</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Viewer</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">传递过来的呢？</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">我画了一个简要的类图</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/gefCallToolsWeb.gif" border=0><BR>图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">D</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"><BR>参照上图，下面罗列重要代码：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">大家主要以下两方面</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">一、创建这些关键事件处理链的过程（注意图上的粗体文字）；</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; COLOR: rgb(153,51,0)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">二、消息从</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">SWT</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Canvas</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">实例传递到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">过程（图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中注释标签的顺序）；</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class GraphicalEditor</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void createPartControl(Composite parent) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">createGraphicalViewer(parent);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected void createGraphicalViewer(Composite parent) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">GraphicalViewer viewer = new ScrollingGraphicalViewer();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">viewer.createControl(parent);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">setGraphicalViewer(viewer);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">configureGraphicalViewer();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">hookGraphicalViewer();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">initializeGraphicalViewer();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected void setGraphicalViewer(GraphicalViewer viewer) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getEditDomain().addViewer(viewer);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">this.graphicalViewer = viewer;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class EditDomain </P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void addViewer(EditPartViewer viewer) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">viewer.setEditDomain(this);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">if (!viewers.contains(viewer))</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">viewers.add(viewer);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class GraphicalViewerImpl</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void setEditDomain(EditDomain domain) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">super.setEditDomain(domain);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">// Set the new event dispatcher, even if the new domain is null.<SPAN>&nbsp; </SPAN>This will dispose</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">// the old event dispatcher.</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getLightweightSystem()</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">.setEventDispatcher(eventDispatcher = new DomainEventDispatcher(domain, this));</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">private final LightweightSystem lws = createLightweightSystem();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class ScrollingGraphicalViewer</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void setEditDomain(EditDomain domain) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">super.setEditDomain(domain);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">// Set the new event dispatcher, even if the new domain is null.<SPAN>&nbsp; </SPAN>This will dispose</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">// the old event dispatcher.</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getLightweightSystem()</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">.setEventDispatcher(eventDispatcher = new DomainEventDispatcher(domain, this));</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; TEXT-DECORATION: underline"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">class </SPAN><SPAN lang=EN-US style="FONT-FAMILY: SimSun">Light</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">weightSystem</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void setEventDispatcher(EventDispatcher dispatcher) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">this.dispatcher = dispatcher;</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN>&nbsp; </SPAN>//</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">在此</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Shapes</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">例子中是</SPAN><SPAN lang=ZH-CN style="FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">DomainEventDispatcher</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">dispatcher.setRoot(root);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">dispatcher.setControl(canvas);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected void addListeners() {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">EventHandler handler = createEventHandler();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.getAccessible().addAccessibleListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.getAccessible().addAccessibleControlListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">canvas.addMouseListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">canvas.addMouseMoveListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">canvas.addMouseTrackListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.addKeyListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.addTraverseListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.addFocusListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.addListener(SWT.MouseWheel, handler);</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">……</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">setEventDispatcher(getEventDispatcher());</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class EventHandler </P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">implements MouseMoveListener, MouseListener, AccessibleControlListener, KeyListener,</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">TraverseListener, FocusListener, AccessibleListener, MouseTrackListener,</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">Listener</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">{</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">…</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">public void keyPressed(KeyEvent e) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN>&nbsp;</SPAN>//</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">在此</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Shapes</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">例子中是</SPAN><SPAN lang=ZH-CN style="FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">DomainEventDispatcher</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; TEXT-DECORATION: underline"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">getEventDispatcher().dispatchKeyPressed(e);</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">…</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">public void mouseDoubleClick(MouseEvent e) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getEventDispatcher().dispatchMouseDoubleClicked(e);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">…</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">public void mouseMove(MouseEvent e) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getEventDispatcher().dispatchMouseMoved(e);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">public void mouseUp(MouseEvent e) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getEventDispatcher().dispatchMouseReleased(e);</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">}</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">…</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这样、在图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">A</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">发送到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">机制做了简要的探讨。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">学习了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">产生</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的机制，可以帮助我们调试</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，同时如果在大家自己的程序中需要有新的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">交互类型，也可以试着建立自己的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">类产生新的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，这样在自己的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">产生对应的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Command,</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这样就可以处理实现新的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">交互类型。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">在下一篇我们探讨一下有关图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">A</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">如何产生</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Command</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，以及执行</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Command</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">问题。</SPAN></P><img src ="http://www.blogjava.net/xdingding/aggbug/22553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 13:58 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（三） 模拟GEF设计思路，解剖GEF2 附图：包含GEF的Editor创建时序图 </title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22552.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22552.html</guid><wfw:comment>http://www.blogjava.net/xdingding/comments/22552.html</wfw:comment><comments>http://www.blogjava.net/xdingding/archive/2005/12/05/22552.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xdingding/comments/commentRss/22552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xdingding/services/trackbacks/22552.html</trackback:ping><description><![CDATA[<BR><BR>&nbsp; 
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><STRONG>包含GEF的Editor创建时序图</STRONG></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> <BR><BR></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">以</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">网站上例子<A href="http://www.eclipse.org/articles/Article-GEF-diagram-editor/shape.html">A Shape Diagram Editor</A>为例</SPAN></P><BR><BR><IMG height=452 hspace=5 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/gefc1.gif" width=590 align=bottom><BR><BR><BR><BR><BR><IMG height=325 hspace=0 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/%E5%8C%85%E5%90%ABgef%E7%9A%84Editor%E7%9A%84createPartControl.gif" width=471><BR><BR><IMG height=253 hspace=0 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/configGraphicalViewer.gif" width=750><BR><BR><IMG height=376 hspace=0 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/initializeGraphicalViewer.gif" width=792>&nbsp;<img src ="http://www.blogjava.net/xdingding/aggbug/22552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 13:55 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（二） 模拟GEF设计思路，解剖GEF 1</title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22550.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22550.html</guid><wfw:comment>http://www.blogjava.net/xdingding/comments/22550.html</wfw:comment><comments>http://www.blogjava.net/xdingding/archive/2005/12/05/22550.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xdingding/comments/commentRss/22550.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xdingding/services/trackbacks/22550.html</trackback:ping><description><![CDATA[&nbsp; 
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">学习笔记（二）</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">模拟</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">设计思路，解剖</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF 1</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">如同其他的一些</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">framework</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一样，是一个复杂庞大（有点夸张<IMG src="http://xdingding.cnblogs.com/Emoticons/emwink.gif" align=absMiddle border=0>）的，当我们想使用驾驭它时，就必须全面的理解其整体构架及其运作过程。这需要我们的毅力和敏锐。旅途开始了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">….</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"><BR>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">主要的任务是针对</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形编辑操作，如下图。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-1.jpg" border=0> 
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">为了使</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">能够广泛的用于种类繁多</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形编辑领域，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">就必须建立一个严格的易扩充</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">/</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易组合</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">/</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易重用的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">框架（当然这种分解细化功能对象的方法思想，我们可以用在其它的地方，其它领域、其他语言如</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">C#</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">上）。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-1.gif" border=0> 
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">那么如果设计</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这个</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">严格的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">框架</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">对于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">是严格的独立，它不依赖与</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">和</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller) </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">以及</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">此框架</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">如何</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">达到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易扩充</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">/</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易组合</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">/</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易重用</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的特性。下面我按照自己拙劣的思路，以麻雀之眼度</SPAN><SPAN lang=ZH-CN style="COLOR: black; FONT-FAMILY: SimSun">鸿雁之志啦<IMG src="http://xdingding.cnblogs.com/Emoticons/emembarrassed.gif" align=absMiddle border=0></SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">对于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in"><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">部分：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">理所当然要使用自家的东东</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。利用</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figuer</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">作为自己的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in"><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">部分：</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">往往内部包含了千差万别、不可预知的商业信息。因此、</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">框架应该尽量减少约束（在下面将详细说明约束）。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in"><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">部分：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart/Draw2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure/Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这三个树状对象模型，在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中将建立了与其对应的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure/Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">结点</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">建立一一关联的关系。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">这样产生的构架如下：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-2.gif" border=0> 
<P style="FONT-SIZE: 8pt; MARGIN: 0in; COLOR: rgb(102,102,102); FONT-FAMILY: 宋体">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-2.jpg" border=0> 
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">思考：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">为什么</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">要同</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一样采用树状结构呢？</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">当</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">以树状的形式存在，这样便于功能分解（这个道理有点像</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">在类设计中</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">复合优于继承</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一般）</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这样每一结点的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">即</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart) </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">仅需要处理</SPAN></P>
<UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 1in; DIRECTION: ltr; unicode-bidi: embed" type=circle>
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; COLOR: rgb(51,51,153)"><SPAN style="FONT-FAMILY: SimSun">自身逻辑功能</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">管理子</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">必要时通知父</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN></LI></UL>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">尤其当用户需要在图形界面编辑界面中，需要使用多种不同</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">行为规则的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">元素（例如不同的形状块，不同行为的连线等）组合来完成工作时（例如类似</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Visio</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这样的界面），这种构架的优势就显露无疑。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">未完待续</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">….(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">下面要探讨如何产生上述三个树状模型等</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">)</SPAN></P><img src ="http://www.blogjava.net/xdingding/aggbug/22550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 13:53 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（一） eclipse的GEF相关项目说明</title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22549.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22549.html</guid><wfw:comment>http://www.blogjava.net/xdingding/comments/22549.html</wfw:comment><comments>http://www.blogjava.net/xdingding/archive/2005/12/05/22549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xdingding/comments/commentRss/22549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xdingding/services/trackbacks/22549.html</trackback:ping><description><![CDATA[<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">学习笔记（一）</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">相关项目说明</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">首先、感谢<A href="http://bjzhanghao.cnblogs.com/">八进制</A>的辛勤劳动和奉献。这几天开始对</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">发生兴趣，<A href="http://bjzhanghao.cnblogs.com/category/36197.html"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">八进制的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">系列</SPAN></A></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">对我学这些的帮助很大入门很快。自己也就顺手把周末学习的东西记录下来。帮助后来学人。我会把这几天所学陆续写出希望大家支持。目前、正在为八进制例子发愁，我对</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">NodePart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">增加了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">ResizeEditPolicy</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，但是不知为何鼠标拖动时有个灰色的区域在随着变化，但鼠标释放时，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">NodeFigure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的尺寸不发生变化，是否是因为在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">refreshVisuals</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中固化了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Size</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，代码学习中</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">….</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">相关项目说明。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">各项目的简介：</P>
<P style="MARGIN: 0in"><IMG height=222 hspace=5 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/temp.jpg" width=350 align=bottom></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><EM><STRONG>Draw2D</STRONG></EM></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">建立了</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">2</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">维的图形库</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">(</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">树状图形部件</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Figure)</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">，负责显示</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">2</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">维的图形展示。<BR></SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><BR><STRONG><EM>GEF</EM></STRONG></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: arial">Graphical Editing Framework</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">）</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">建立标准的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">构架，代码利用</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">作为自己的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">部分，主要代码实现复杂的树状</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">(</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">于</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">分别对应</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">)<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的控制器。实现的框架具有很高的可复用等特性，例如：将图形部件功能分解为多个</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">EditPolicy</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">，这样使用者可以通过</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">installEditPolicy</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">接口来定制，以及扩充自己的某一功能特征。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><BR><STRONG><EM>EMF</EM></STRONG>:<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: arial">Eclipse Modeling Framework</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">）</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">首先在一个轻量级项目以及项目初期开发，</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">常常采用拥有</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Property</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Java</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">对象来简单明了表示【即</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: arial">Plain Old Java Objects (POJOs)</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">】。</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: arial">E</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">MF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">定义了一套Ecore元模型，使得</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">具有易于维护、易于扩充、易于数据交换等特性的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Model Framwork</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">。因此、在实际中大型的项目中往往会采用</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">EMF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的方式来实现整体的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">模式。例如：</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">ROSE</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的最新版本</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">IBM.Rational.Software.Architect就是采用了这种构架。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><BR><STRONG><EM>GMF</EM></STRONG></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: arial">Graphical Modeling Framework </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">）</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">使用了</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">和</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">EMF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">，建立了两个之间的桥梁框架，同时实现了一些领域上的典范应用，如</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">UML</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">图，甘特图，脑图等。（项目正在进行中这些功能还未完备。可以用来参考以实现自己的一个标准的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">EMF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的应用）。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">各项目依赖关系：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="MARGIN: 0in"><IMG style="WIDTH: 218px; HEIGHT: 173px" height=159 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/temp2.JPG" width=218 border=0></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">如上图：使用者可以有以下几种用法：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EMF: Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">管理层</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D: </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">二维图形展现</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GEF: </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">二维图形的简单编辑模块</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GEF </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> EMF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">二维图形的编辑模块</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GEF </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> EMF </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GMF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：基于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GMF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">提供的图形编辑功能之上扩展<BR></SPAN></P><img src ="http://www.blogjava.net/xdingding/aggbug/22549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 13:50 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>