<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>稀饭说 &#187; Flash&amp;AS</title>
	<atom:link href="http://dante.im/tags/flashas/feed/" rel="self" type="application/rss+xml" />
	<link>http://dante.im</link>
	<description>我说，要有光，于是就……</description>
	<lastBuildDate>Sat, 31 Jul 2010 14:44:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>RIA:幻想之门</title>
		<link>http://dante.im/introducing-ria/</link>
		<comments>http://dante.im/introducing-ria/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 14:48:45 +0000</pubDate>
		<dc:creator>coolcfan</dc:creator>
				<category><![CDATA[作品]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Flash&AS]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[SilverLight]]></category>

		<guid isPermaLink="false">http://press.coolcfan.org/?p=30</guid>
		<description><![CDATA[注：这是我用来交多媒体技术课作业的一篇文章，所以分类是“作品”。话说这门课倒是让我费了很多心血，先是这篇文章，然后是i.coolcfan.org的那个Flash…… 1.你好，世界！ 我们为什么需要RIA 如今，互联网无处不在，网络应用丰富多彩。可是，互联网并不是从一开始就这样友好。有那样一个年代，人们上网的时候敲的不是域名，而是各种难记的命令；获取到的信息没有图片和音乐，只有枯燥的字符。那时候的互联网并不是一个大众化工具，而只是Geek1们的玩物，Hacker们的乐园。直到有一天，HTML来到这个世上，改变了一切。网络有了色彩，有了声音，有了互动，人们不需要学习很多就可以使用它，曾经只有技术精英才能掌握的互联网，终于第一次真正地打印2出了“Hello World”3。 经过数十年的发展，今天的HTML和相关表现技术（如CSS、JavaScript）已经相当成熟。但是，人们总是追求更高的理想。网络有了色彩，有了声音，有了互动，这还不够。人们不会仅仅满足于静态的色彩排布，因为眼睛渴望运动的影像；人们不会仅仅满足于粗糙的波形，因为耳朵期待亲临现场的感觉；人们不会仅仅满足于在聊天室说说话，在论坛灌灌水，因为他们心中想要的，是在网上的第二个家。于是，人们开始创造新的技术，因为HTML家族远远不能满足他们现在的需求。于是，人们想到了运行于电脑桌面的本地程序。于是，就有了RIA。于是，互联网终于可以用自己的声音，说出“你好，世界”。 2.贫穷，富有？4 揭秘RIA RIA是什么？ 人们每天看到的，是互联网上形形色色的网页。但其实这些“网页”中的大部分，是动态生成的，例如论坛，博客等服务的页面。事实上，用以和用户交互，生成这些页面的，就是互联网应用程序（IA）。IA运行在服务器上，根据用户的请求进行读取数据库等操作，然后生成页面，有浏览器下载到本地显示，这便是“瘦客户端”的C/S架构。那么什么又是富互联网应用程序呢？多了一个Rich，与传统的IA究竟有何区别呢？ RIA，即“Rich Internet Application”的缩写，如果一定要翻译成中文，就是“富互联网应用程序”。 RIA是一种具有近似于传统桌面应用系统功能和特性的互联网应用程序，其最大的特点是将大部分处理任务移植到客户端，仅保留一些必要数据与服务器端进行信息交互。与传统互联网程序采用的以页面（HTML）表现内容，由服务器端传递数据的模式相比，RIA将桌面程序的强大交互性和传统Web应用的灵活性结合，其客户端采用异步方式5与服务器端通信，当需要进行数据交互时，客户端向服务端发出请求，并对服务端数据进行处理，传递给表现层。用户与这些应用交互时并不会被要求刷新页面，而且在通信中只传输改变了的那一小部分数据，减少了数据量，有效利用了网络资源。与此同时，RIA平台通常对多媒体内容有着良好的支持，甚至可以在线播放高清晰度音视频。因此，与传统互联网应用程序相比，RIA更加安全，反应速度更高，效率更高，交互性更好，而且最大的一个特点就是，可以离线使用。 RIA简史 在2001年，大名鼎鼎的Macromedia在一篇文档中提到了Rich Internet Application这个词组。这是RIA在世界上的首秀。实际上，早在那时，便有走在前沿的Flash开发者，在他们的开发过程中采用了类似RIA的模型。但由于种种原因，比如网络带宽，开发工具等问题，RIA的概念并未流行。 到了2004年，Macromedia推出了Flex，这是为RIA量身定做的工具，但由于设计问题而未得到广泛使用。因此虽然Macromedia最早提出RIA，但是最早的RIA应用却是基于Ajax（异步JavaScript和XML）的，其代表作就是Gmail。在Gmail中，人们从收件箱点开一封邮件，页面不会被刷新，只有邮件的内容被下载，这符合RIA的特性。 到了2006年的时候，收购了Macromedia的Adobe发布了ActionScript 3（语言）和Flex 2.0（开发环境），而微软等公司也都先后宣布了自己的RIA产品，RIA的热潮这才真正掀起。到了今天，RIA在开发方面形成了三足鼎立，群雄争霸的市场局面（见下文）；在应用方面被各大网站广泛采用，例如著名的jooce.com，NBC的奥运站等。 3.风生，水起。 介绍RIA开发领域的有关产品 3.0 不是RIA的RIA——Ajax 　　Ajax是Asynchronous JavaScript and XML的缩写，代表JavaScript的异步传输和XML技术。Ajax实际上并不是一个完整的技术，它只是JavaScript的一部分。但由于利用它可以在传统HTML页面上实现RIA，所以Ajax也被列入RIA开发领域。 Ajax有如下内容： 基于XHTML和CSS标准的网页表示 使用DOM（文档对象模型）进行动态显示和交互 使用XMLHttpRequest方式与服务器进行异步通信 使用JavaScript绑定数据和界面 　　Ajax的优点很明显，例如技术免费，浏览器支持广泛，不需要安装第三方插件等；它的缺点同样明显，比如代码过于复杂，维护麻烦，交互性不强，界面元素简单，效率低，多媒体支持不够，没有合适开发环境等。对于Ajax的这些缺点，现在已经有不少解决的方法，比如在开发时采用框架以实现代码复用，或者将Ajax与Flex&#38;Flash、Silverlight等结合使用。因此，尽管缺点很多，Ajax的生命力仍旧旺盛。 3.1 时代的开端——Flash，Flex和ActionScript “RIA的时代是随着ActionScript的诞生而开启的。” 　　Flash最早是为设计者设计的，其功能主要偏向矢量图的绘制和时间轴的控制。在早期版本中，只有少量的脚本，用于使动画师更好地控制动画。从Flash 5开始，一个新的时代开始了。在这一版本中，引入了名为ActionScript的脚本编程语言。ActionScript在设计时借鉴了JavaScript的语法，同时可以很好地在Flash中创建动态效果、用户交互等内容，这使得Flash作品变得丰富多彩。在ActionScript 1.0和2.0的时代，“闪客”们成功地用Flash创造了大量优秀作品。这其中有2Advanced Studios LLC官网那样惊艳的网站，也有小小、林度等一大批剧情类动画作品，甚至还有《小鸡快跑》这样的电影（使用了Flash）。 　　但是ActionScript的引入使得一些设计师感到困扰，因为他们并不理解软件开发；Flash作为一款动画工具，也不适合开发人员使用。因此，Macromedia推出了Flex 1.0。Flex生成的，同样是Flash格式的SWF文件，同样是基于矢量图形的，因此同样可以做的非常炫酷。但是因为开发工具定价过高，速度过慢，所以并未取得成功。 　　2006年，收购Macromedia后的Adobe发布了Flex 2.0和Flash CS3，做出了堪称伟大的改进。 　　首先，Adobe推出了真正完全面向对象的ActionScript 3。AS3遵守ECMAScript ((ECMAScript和E4X：ECMA为欧洲计算机工业协会，ECMAScript是ECMA颁布的脚本语言标准，E4X是ECMA颁布的语言在操作XML时的规范。))规范，引入了类似Java的面向对象语法，和对ECMA for XML（E4X）的原生支持；同时，在多年浸淫于图像领域的Adobe工程师的努力下，AS3的Framework被重写，架构的合理、规范程度，堪比.NET Framework，而且专门针对Flash和Flex推出了两套Framework（fl和mx）。 　　第二，Adobe推翻了Macromedia的Flex，采用开源的Eclipse构建了新的Flex [...]]]></description>
			<content:encoded><![CDATA[<p>注：这是我用来交多媒体技术课作业的一篇文章，所以分类是“作品”。话说这门课倒是让我费了很多心血，先是这篇文章，然后是i.coolcfan.org的那个Flash……</p>
<h3>1.你好，世界！</h3>
<p style="PADDING-LEFT: 30px"><strong><em><span style="color: #333333;">我们为什么需要RIA</span></em></strong></p>
<p style="padding-left: 30px;">如今，互联网无处不在，网络应用丰富多彩。可是，互联网并不是从一开始就这样友好。有那样一个年代，人们上网的时候敲的不是域名，而是各种难记的命令；获取到的信息没有图片和音乐，只有枯燥的字符。那时候的互联网并不是一个大众化工具，而只是Geek<sup>1</sup>们的玩物，Hacker们的乐园。直到有一天，HTML来到这个世上，改变了一切。网络有了色彩，有了声音，有了互动，人们不需要学习很多就可以使用它，曾经只有技术精英才能掌握的互联网，终于第一次真正地打印<sup>2</sup>出了“Hello World”<sup>3</sup>。</p>
<p style="padding-left: 30px;">经过数十年的发展，今天的HTML和相关表现技术（如CSS、JavaScript）已经相当成熟。但是，人们总是追求更高的理想。网络有了色彩，有了声音，有了互动，这还不够。人们不会仅仅满足于静态的色彩排布，因为眼睛渴望运动的影像；人们不会仅仅满足于粗糙的波形，因为耳朵期待亲临现场的感觉；人们不会仅仅满足于在聊天室说说话，在论坛灌灌水，因为他们心中想要的，是在网上的第二个家。于是，人们开始创造新的技术，因为HTML家族远远不能满足他们现在的需求。于是，人们想到了运行于电脑桌面的本地程序。于是，就有了RIA。于是，互联网终于可以用自己的声音，说出“你好，世界”。</p>
<h3>2.贫穷，富有？<sup>4</sup></h3>
<p style="PADDING-LEFT: 30px"><strong><em><span style="color: #333333;">揭秘RIA</span></em></strong></p>
<p style="padding-left: 30px;"><strong><span style="color: #800000;">RIA是什么？</span></strong></p>
<p style="padding-left: 30px;">人们每天看到的，是互联网上形形色色的网页。但其实这些“网页”中的大部分，是动态生成的，例如论坛，博客等服务的页面。事实上，用以和用户交互，生成这些页面的，就是互联网应用程序（IA）。IA运行在服务器上，根据用户的请求进行读取数据库等操作，然后生成页面，有浏览器下载到本地显示，这便是“瘦客户端”的C/S架构。那么什么又是富互联网应用程序呢？多了一个Rich，与传统的IA究竟有何区别呢？</p>
<p style="padding-left: 30px;">RIA，即“Rich Internet Application”的缩写，如果一定要翻译成中文，就是“富互联网应用程序”。</p>
<p style="padding-left: 30px;">RIA是一种具有近似于传统桌面应用系统功能和特性的互联网应用程序，其最大的特点是将大部分处理任务移植到客户端，仅保留一些必要数据与服务器端进行信息交互。与传统互联网程序采用的以页面（HTML）表现内容，由服务器端传递数据的模式相比，RIA将桌面程序的强大交互性和传统Web应用的灵活性结合，其客户端采用异步方式<sup>5</sup>与服务器端通信，当需要进行数据交互时，客户端向服务端发出请求，并对服务端数据进行处理，传递给表现层。用户与这些应用交互时并不会被要求刷新页面，而且在通信中只传输改变了的那一小部分数据，减少了数据量，有效利用了网络资源。与此同时，RIA平台通常对多媒体内容有着良好的支持，甚至可以在线播放高清晰度音视频。因此，与传统互联网应用程序相比，RIA更加安全，反应速度更高，效率更高，交互性更好，而且最大的一个特点就是，可以离线使用。</p>
<p style="padding-left: 30px;"><strong><span style="color: #800000;">RIA简史</span></strong></p>
<p style="padding-left: 30px;">在2001年，大名鼎鼎的Macromedia在一篇文档中提到了Rich Internet Application这个词组。这是RIA在世界上的首秀。实际上，早在那时，便有走在前沿的Flash开发者，在他们的开发过程中采用了类似RIA的模型。但由于种种原因，比如网络带宽，开发工具等问题，RIA的概念并未流行。</p>
<p style="padding-left: 30px;">到了2004年，Macromedia推出了Flex，这是为RIA量身定做的工具，但由于设计问题而未得到广泛使用。因此虽然Macromedia最早提出RIA，但是最早的RIA应用却是基于Ajax（异步JavaScript和XML）的，其代表作就是Gmail。在Gmail中，人们从收件箱点开一封邮件，页面不会被刷新，只有邮件的内容被下载，这符合RIA的特性。</p>
<p style="padding-left: 30px;">到了2006年的时候，收购了Macromedia的Adobe发布了ActionScript 3（语言）和Flex 2.0（开发环境），而微软等公司也都先后宣布了自己的RIA产品，RIA的热潮这才真正掀起。到了今天，RIA在开发方面形成了三足鼎立，群雄争霸的市场局面（见下文）；在应用方面被各大网站广泛采用，例如著名的jooce.com，NBC的奥运站等。</p>
<h3>3.风生，水起。</h3>
<p style="padding-left: 30px;"><strong><span style="color: #333333;"><em>介绍RIA开发领域的有关产品</em></span></strong></p>
<p style="PADDING-LEFT: 30px"><span style="color: #000080;"><strong>3.0 不是RIA的RIA——Ajax</strong></span></p>
<p style="PADDING-LEFT: 60px">　　Ajax是Asynchronous JavaScript and XML的缩写，代表JavaScript的异步传输和XML技术。Ajax实际上并不是一个完整的技术，它只是JavaScript的一部分。但由于利用它可以在传统HTML页面上实现RIA，所以Ajax也被列入RIA开发领域。</p>
<p style="PADDING-LEFT: 60px"><strong>Ajax有如下内容：</strong></p>
<p style="padding-left: 90px;">基于XHTML和CSS标准的网页表示<br />
使用DOM（文档对象模型）进行动态显示和交互<br />
使用XMLHttpRequest方式与服务器进行异步通信<br />
使用JavaScript绑定数据和界面</p>
<p style="PADDING-LEFT: 60px">　　Ajax的优点很明显，例如技术免费，浏览器支持广泛，不需要安装第三方插件等；它的缺点同样明显，比如代码过于复杂，维护麻烦，交互性不强，界面元素简单，效率低，多媒体支持不够，没有合适开发环境等。对于Ajax的这些缺点，现在已经有不少解决的方法，比如在开发时采用框架以实现代码复用，或者将Ajax与Flex&amp;Flash、Silverlight等结合使用。因此，尽管缺点很多，Ajax的生命力仍旧旺盛。</p>
<p style="padding-left: 30px;"><strong><span style="color: #000080;">3.1 时代的开端——Flash，Flex和ActionScript</span></strong></p>
<p style="padding-left: 30px;"><strong><em><span style="color: #333333;">“RIA的时代是随着ActionScript的诞生而开启的。”</span></em></strong></p>
<p style="PADDING-LEFT: 60px">　　Flash最早是为设计者设计的，其功能主要偏向矢量图的绘制和时间轴的控制。在早期版本中，只有少量的脚本，用于使动画师更好地控制动画。从Flash 5开始，一个新的时代开始了。在这一版本中，引入了名为ActionScript的脚本编程语言。ActionScript在设计时借鉴了JavaScript的语法，同时可以很好地在Flash中创建动态效果、用户交互等内容，这使得Flash作品变得丰富多彩。在ActionScript 1.0和2.0的时代，“闪客”们成功地用Flash创造了大量优秀作品。这其中有2Advanced Studios LLC官网那样惊艳的网站，也有小小、林度等一大批剧情类动画作品，甚至还有《小鸡快跑》这样的电影（使用了Flash）。</p>
<p style="PADDING-LEFT: 60px">　　但是ActionScript的引入使得一些设计师感到困扰，因为他们并不理解软件开发；Flash作为一款动画工具，也不适合开发人员使用。因此，Macromedia推出了Flex 1.0。Flex生成的，同样是Flash格式的SWF文件，同样是基于矢量图形的，因此同样可以做的非常炫酷。但是因为开发工具定价过高，速度过慢，所以并未取得成功。</p>
<p style="PADDING-LEFT: 60px">　　2006年，收购Macromedia后的Adobe发布了Flex 2.0和Flash CS3，做出了堪称伟大的改进。</p>
<p style="PADDING-LEFT: 60px">　　<strong>首先，</strong>Adobe推出了真正完全面向对象的ActionScript 3。AS3遵守ECMAScript ((ECMAScript和E4X：ECMA为欧洲计算机工业协会，ECMAScript是ECMA颁布的脚本语言标准，E4X是ECMA颁布的语言在操作XML时的规范。))规范，引入了类似Java的面向对象语法，和对ECMA for XML（E4X）的原生支持；同时，在多年浸淫于图像领域的Adobe工程师的努力下，AS3的Framework被重写，架构的合理、规范程度，堪比.NET Framework，而且专门针对Flash和Flex推出了两套Framework（fl和mx）。</p>
<p style="PADDING-LEFT: 60px">　　<strong>第二，</strong>Adobe推翻了Macromedia的Flex，采用开源的Eclipse构建了新的Flex 2.0和3.0，并且在完全支持ActionScript 3的同时加入了用来描述界面的MXML语言，这与微软WPF中的XAML的想法不谋而合。Adobe稍后还推出了Flash CS3，于是Flash和Flex两个产品齐头并进，既可独当一面，又可协作工作，对程序员和设计人员都保持了足够的友好度。</p>
<p style="PADDING-LEFT: 60px">　　<strong>第三，</strong>Adobe推出了优秀的Flash Player 9，优化了性能的同时，支持AS3。而且，Adobe Flash Player提供了对于H.264编码的flv支持，这使得Flash应用可以在线播放高清（HD）的流媒体。借由Flash Player的支持，现在在Youtube等网站已经出现了720p的在线视频。</p>
<p style="PADDING-LEFT: 60px">　　<strong>第四，</strong>Adobe推出了AIR（Adobe Integrated Runtime，Adobe集成运行库）。这个名字与RIA恰好相反的产品，提供了强大的离线应用支持，允许Flash和Ajax应用程序脱离浏览器在本地运行，真正将互联网应用程序搬到了桌面上。</p>
<p style="PADDING-LEFT: 60px">　　值得一提的是，Flex 3正式发布后，Adobe还提供了类似微软DreamSpark的学生计划，而且更为宽松。只要提供有效的学生证照片，不论是小学的，中学的，还是大学的，都可以免费得到Flex Builder 3（Flex的集成开发环境）的Professional版本的序列号。</p>
<p style="PADDING-LEFT: 60px">　　由于Flash已经流行多年，Flash Player的安装率高达98%，有了这一基础，Flash、Flex的兼容性可以说仅次于Ajax，而前者又有着无与伦比的优越性。因此，Flash和Flex这对搭档可以称得上是RIA领域当之无愧的霸主。现在，Adobe又推出了Flash CS4和Flex 4.0。前者可以与Adobe其他产品（如Photoshop）无缝协作，后者增加了更多面向开发人员的特性，相信Flash&amp;Flex的霸主地位仍将持续下去。</p>
<p style="padding-left: 30px;"><strong><span style="color: #000080;">3.2 巨人的利剑——Silverlight</span></strong></p>
<p style="padding-left: 30px;"><strong><em><span style="color: #333333;">“闪耀在虚拟世界的银色之光。”</span></em></strong></p>
<p style="padding-left: 60px;">　　微软在早期的互联网战略失败后，痛定思痛，推出了.NET战略。2006年～2007年初，随着Windows Vista和.NET Framework 3的上市，微软用于与Flash家族竞争的RIA产品Silverlight（银光）揭开了她的面纱。<br />
Silverlight技术可以视为.NET的WPF（Windows Presentation Foundation）技术的一个子集，同时也是XAML的一个子集。与Adobe的产品一样，SilverLight同样基于矢量图形，并且提供对于Windows Media中流媒体的支持，同时支持WMV-HD。同时，由于微软在SilverLight中集成了DRM（数字版权管理）的支持，使得电影和唱片业对SilverLight给予好评。</p>
<p style="padding-left: 60px;">　　因为微软的一贯作风，第一代SilverLight并不成熟。它不够小巧，支持的浏览器不够多，也没有足够专业的开发工具和设计工具供使用。不过，2008年10月，微软发布了SilverLight 2.0，追加了跨平台支持，同时弥补了1.0版本的大量不足之处，例如提供了一个真正小巧的运行库。同时，微软的配套产品线也更为完整，既有面向开发人员的Visual Studio 2008，也有面向设计人员的Expression Studio 2.0（暂时只支持SilverLight 1.0），而且这两款产品都在微软的DreamSpark计划之中，这意味着大学生可以免费得到完整的SilverLight开发环境。在这一点上，微软无疑比Adobe更加慷慨。</p>
<p style="padding-left: 60px;">　　现阶段SilverLight的占有率并不高，但随着2008年北京奥运会中，NBC的奥运报道网站对SilverLight的全面采用，SilverLight插件的安装量在不断增加。现在已经达到的20%的安装量虽然和Flash Player的98%相差悬殊，但足以让SilverLight坐稳RIA领域的第二把交椅。</p>
<p style="padding-left: 30px;"><strong><span style="color: #000080;">3.3 落日的余辉——JavaFX</span></strong></p>
<p style="padding-left: 60px;">也许在RIA的三巨头中，JavaFX是最落魄的一个。虽然在2007年5月，这一产品就在JavaOne大会上首次公布，但是直到今天，除了Sun的官方网站外，仍然鲜有基于JavaFX的知名应用。</p>
<p style="padding-left: 60px;">Java提供了脚本运行库，图形渲染库和媒体格式的解码器，并且有面向移动应用的版本。与此同时，JavaFX所采用的脚本语言具有函数式语言的特质，符合当前的流行观念。JavaFX基于Java SE和Java ME，这使得其可移植性非常优秀，而且由于依托了Java平台，相关的工具绝不会缺少。然而，JavaFX本身的进展缓慢，至今没有推出正式版本的SDK，而且由于最近的金融危机，SUN公司财政遇到困难，陷入“待售”的境地。Sun已成落日，JavaFX又能闪耀多久呢？</p>
<p style="padding-left: 30px;"><strong><span style="color: #000080;">3.4 ——其他</span></strong></p>
<p style="padding-left: 60px;">在RIA领域，还有其他很多产品和解决方案，其中不乏名门之后。比如Google Gears，就可将Web应用本地化运行，而且知名的博客引擎Wordpress就已经采用了这一技术来优化后台访问。又如类似的Flex的Openlaszlo，采用Laszlo语言，和类似XML的界面描述方法，并且以SWF运行；它还内置了RPC（远程过程调用）支持和音频视频的支持，并且因为最后生成的是SWF，兼容性和表现力都很不错，使得很多人对它寄予厚望。</p>
<h3>4.结语</h3>
<p style="padding-left: 30px;">根据市场调查机构的分析数据，现在传统程序员的需求在下降，而精通RIA开发的程序员和设计人员的需求却在上升。RIA霸主Flash所使用的ActionScript语言，已在全球编程语言排行榜上连续数个月保持强劲增长势头。这一切都表明，RIA拥有者光明的前途。而且，无论是当前火热的云计算，还是之前曾经火热的分布式计算，这些概念都与RIA的概念毫无冲突。可以说，RIA拥有一个光明的前景，在电影中那种智能的互联网出现之前，RIA将主导互联网的发展。</p>
<h3>5.参考资料</h3>
<p style="padding-left: 30px;"><strong>网站<br />
</strong><em>维基百科 Wikipedia： </em><a href="http://zh.wikipedia.org"><em>http://zh.wikipedia.org</em></a><br />
<em>Sun Microsystems： </em><a href="http://www.sun.com"><em>http://www.sun.com</em></a></p>
<p style="padding-left: 30px;"><strong>书籍</strong><br />
<em>《ActionScript 3 殿堂之路》，by 孙颖，电子工业出版社<br />
《Flex第一步》，by 邱彦林，清华大学出版社<br />
《程序员》杂志</em></p>
<p style="padding-left: 30px;"><strong>其他<br />
</strong><em>【PPT】 闪耀在虚拟世界的银色之光，by David</em></p>
<h3>6.注释</h3>
<ol class="footnotes"><li id="footnote_0_30" class="footnote">Geek：译成“极客”，常指代那些技术狂人。现在含义有所推广。</li><li id="footnote_1_30" class="footnote">打印：这里借用了编程语言里在屏幕显示字符的方法，无论在C还是在JavaScript中，信息的输出都有一个Print函数。</li><li id="footnote_2_30" class="footnote">Hello World：几乎所有编程语言教材所讲解的第一个实例都是Hello World，因此这句话被视作一个开端。</li><li id="footnote_3_30" class="footnote">贫穷，富有：这一标题指代传统瘦客户端Web应用与RIA的对比。</li><li id="footnote_4_30" class="footnote">异步方式：异步，指客户端向服务器发出请求后，不等待服务器的返回信息，而继续执行下面的操作。同步方式则恰好相反。</li></ol><hr />
<p><span style="font-size: large; color: #ff0000;"><a href="http://dante.im/introducing-ria/">永久链接：点这里打开文章页</a></span></p>
<p><small><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/80x15.png" /></a> coolcfan @ <a href="http://dante.im">稀饭说</a>, 2009. |
<a href="http://dante.im/introducing-ria/#comments">一个评论</a> |
添加到
<a href="http://del.icio.us/post?url=http://dante.im/introducing-ria/&title=RIA:幻想之门">del.icio.us</a>
<br/>
日志标签: <a href="http://dante.im/tags/actionscript/" rel="tag">ActionScript</a>, <a href="http://dante.im/tags/ajax/" rel="tag">Ajax</a>, <a href="http://dante.im/tags/flashas/" rel="tag">Flash&amp;AS</a>, <a href="http://dante.im/tags/ria/" rel="tag">RIA</a>, <a href="http://dante.im/tags/silverlight/" rel="tag">SilverLight</a><br/>
</small></p>
	<p>相关日志</p>
	<ul class="st-related-posts">
	<li><a href="http://dante.im/singleton-trick-in-as3/" title="AS3：单例模式的大材小用 (2008年12月24日)">AS3：单例模式的大材小用</a> (4)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dante.im/introducing-ria/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AS3：单例模式的大材小用</title>
		<link>http://dante.im/singleton-trick-in-as3/</link>
		<comments>http://dante.im/singleton-trick-in-as3/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 04:33:19 +0000</pubDate>
		<dc:creator>coolcfan</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash&AS]]></category>
		<category><![CDATA[设计模式]]></category>

		<guid isPermaLink="false">http://press.coolcfan.org/?p=13</guid>
		<description><![CDATA[前言：临近期末了，有的课要考试了，不考试的课则要收作业了。这几天为我的个人网站做了一个FlashWeb，并且准备拿它交某门课的作业。这个FlashWeb的设计来源于Dreamix给我秀过的一个About页，那个页面用JS实现了非常酷的九宫格效果，而我用ActionScript 3（缩写为AS3）纯代码对其进行了模仿。我会整理一下我在做这个东西时用到的技巧，今天是第一篇：单例模式的大材小用。 今天的话题，要从数字说起。有编程经验的人都知道，在程序代码中不应该直接出现大量的特定的数字，因为数字没有明显的含义，容易使人产生困扰。为了避免这个问题，在使用C、C++、Delphi这些语言编程时，对于那些要经常使用但不需要改变的数字，常使用宏或常量来代替，并且将这些宏和常量的声明放在一些头文件（*.h）中，以便在别的程序中使用include来调用。最明显的例子就是MFC和VCL对Windows API里的一些常量的封装，你常常会看到一串大写的单词，而它们通常表示一串16进制的数值。想想吧，如果在编程的时候必须直接使用这些16进制值，将会是多么可怕的一件事。 可是在最新版本Flash和Flex里面采用ActionScript 3语言编程的时候，我们不能使用“include头文件”这样的方式，因为AS3采用了标准的面向对象编程模式。可是事情还是有解决的方法的。比如经常会用到的这句代码： button.addEventListener(MouseEvent.CLICK, onMenuBtnClick) Flash类库的这种设计不仅使代码的意义更清楚，还带来了另一个好处——开发工具（我用的是Flex Builder）可以为我们提供代码提示和自动完成，还会有严格的语义检查。那么MouseEvent.CLICK究竟是什么呢？让我来分析一下： 首先，圆点符号在AS3中通常是什么？是对类的属性和方法的访问。 那么，MouseEvent是什么？我猜它是一个类。 最后，CLICK是什么？我猜它是MouseEvent类的一个公有属性。 让我来验证一下吧。在Adobe官方的“ActionScript 3.0 语言和组件参考”中，对MouseEvent有如下描述： 包 flash.events 类 public class MouseEvent 好了，看来它确实是一个类。接着，在此文档中，有一个名为“公共 常量”的列表，第一项就是CLICK，这说明我完全猜对了。 现在回到我的FlashWeb。由于要模仿Dreamix给我的JS，我需要处理非常多的数字。这包括了颜色、位置（x,y）、大小（width,height）、运动参数（速度,缓动因子）等等一大堆的数字，而且我会在不止一个类里面使用它们。所以，向Flash的类库学习，就是我唯一的选择。 首先，我写了一个名叫numData的类，把我想得到的数字都放在里面，写成公共常量（public const），并给每个常量都起了一个有意义的名字，这样只要在别的类里建立一个numData的实例，就可以调用这些常量了。 看上去这样就可以了，是么？但是，等等！我使用MouseEvent的时候，并没有对其进行实例化（就是new MouseEvent()），就能直接使用它的常量！要实现这样的效果，就要使用static（静态）关键字，将其声明为静态常量，这样一来，即使不创建实例，也可以调用此常量了。 事实上，单例模式（Singleton Pattern）就是这样来的。有的时候我们不希望别人创建某个类的多个实例，而只允许这个类被实例化一次，所以我们会对外屏蔽类的构造函数，而只提供自定义的一个方法。Java程序员通常采用的办法是，把类的构造函数写成私有（private）的，然后提供一个静态公共方法来让别人访问类的实例。但是在AS3中，不允许私有的构造函数。这时大家常常通过抛出异常的方法来避免构造函数被外界执行，同时写一个静态方法来提供类的实例，其中的一个典型的写法，可以在RIAHome的文章《如何在ActionScript 3.0里使用单例模式》里看到。 很复杂是么？但是我需要单例模式么？暂时不需要。我现在只需要单纯地让我的numData类不会被任何人创建实例，所以我只需要将RIAHome介绍单例模式的文章中，禁止外界访问构造函数的部分拿来，就可以了。 package &#123; public class numData &#123; static public const ... public function numData&#40;enforcer:SingletonEnforcer&#41;&#123;&#125; &#125; &#125; class SingletonEnforcer &#123;&#125; 现在，我有了一个足够好的numData类，我可以享受Flex Builder的代码提示和错误检查带来的便捷，而且我的程序也更加清楚、有意义。 好了，今天要说的就是这些。 P.S. [...]]]></description>
			<content:encoded><![CDATA[<p>前言：临近期末了，有的课要考试了，不考试的课则要收作业了。这几天为我的个人网站做了一个FlashWeb，并且准备拿它交某门课的作业。这个FlashWeb的设计来源于Dreamix给我秀过的一个About页，那个页面用JS实现了非常酷的九宫格效果，而我用ActionScript 3（缩写为AS3）纯代码对其进行了模仿。我会整理一下我在做这个东西时用到的技巧，今天是第一篇：单例模式的大材小用。</p>
<p>今天的话题，要从数字说起。有编程经验的人都知道，在程序代码中不应该直接出现大量的特定的数字，因为数字没有明显的含义，容易使人产生困扰。为了避免这个问题，在使用C、C++、Delphi这些语言编程时，对于那些要经常使用但不需要改变的数字，常使用宏或常量来代替，并且将这些宏和常量的声明放在一些头文件（*.h）中，以便在别的程序中使用include来调用。最明显的例子就是MFC和VCL对Windows API里的一些常量的封装，你常常会看到一串大写的单词，而它们通常表示一串16进制的数值。想想吧，如果在编程的时候必须直接使用这些16进制值，将会是多么可怕的一件事。</p>
<p>可是在最新版本Flash和Flex里面采用ActionScript 3语言编程的时候，我们不能使用“include头文件”这样的方式，因为AS3采用了标准的面向对象编程模式。可是事情还是有解决的方法的。比如经常会用到的这句代码：</p>
<blockquote><p>button.addEventListener(MouseEvent.CLICK, onMenuBtnClick)</p></blockquote>
<p>Flash类库的这种设计不仅使代码的意义更清楚，还带来了另一个好处——开发工具（我用的是Flex Builder）可以为我们提供代码提示和自动完成，还会有严格的语义检查。那么MouseEvent.CLICK究竟是什么呢？让我来分析一下：<br />
首先，圆点符号在AS3中通常是什么？是对类的属性和方法的访问。<br />
那么，MouseEvent是什么？我猜它是一个类。<br />
最后，CLICK是什么？我猜它是MouseEvent类的一个公有属性。<br />
让我来验证一下吧。在Adobe官方的“ActionScript 3.0 语言和组件参考”中，对MouseEvent有如下描述：</p>
<blockquote><p>包 flash.events<br />
类 public class MouseEvent</p></blockquote>
<p>好了，看来它确实是一个类。接着，在此文档中，有一个名为“公共 常量”的列表，第一项就是CLICK，这说明我完全猜对了。</p>
<p>现在回到我的FlashWeb。由于要模仿Dreamix给我的JS，我需要处理非常多的数字。这包括了颜色、位置（x,y）、大小（width,height）、运动参数（速度,缓动因子）等等一大堆的数字，而且我会在不止一个类里面使用它们。所以，向Flash的类库学习，就是我唯一的选择。<br />
首先，我写了一个名叫numData的类，把我想得到的数字都放在里面，写成公共常量（public const），并给每个常量都起了一个有意义的名字，这样只要在别的类里建立一个numData的实例，就可以调用这些常量了。<br />
看上去这样就可以了，是么？但是，等等！我使用MouseEvent的时候，并没有对其进行实例化（就是new MouseEvent()），就能直接使用它的常量！要实现这样的效果，就要使用static（静态）关键字，将其声明为静态常量，这样一来，即使不创建实例，也可以调用此常量了。<br />
事实上，单例模式（Singleton Pattern）就是这样来的。有的时候我们不希望别人创建某个类的多个实例，而只允许这个类被实例化一次，所以我们会对外屏蔽类的构造函数，而只提供自定义的一个方法。Java程序员通常采用的办法是，把类的构造函数写成私有（private）的，然后提供一个静态公共方法来让别人访问类的实例。但是在AS3中，不允许私有的构造函数。这时大家常常通过抛出异常的方法来避免构造函数被外界执行，同时写一个静态方法来提供类的实例，其中的一个典型的写法，可以在RIAHome的文章《<a href="http://www.riahome.cn/?p=154" target="_blank">如何在ActionScript 3.0里使用单例模式</a>》里看到。<br />
很复杂是么？但是我需要单例模式么？暂时不需要。我现在只需要单纯地让我的numData类不会被任何人创建实例，所以我只需要将RIAHome介绍单例模式的文章中，禁止外界访问构造函数的部分拿来，就可以了。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> numData
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">static</span> <span style="color: #0066CC;">public</span> const ...
        <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> numData<span style="color: #66cc66;">&#40;</span>enforcer:SingletonEnforcer<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000000; font-weight: bold;">class</span> SingletonEnforcer <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>现在，我有了一个足够好的numData类，我可以享受Flex Builder的代码提示和错误检查带来的便捷，而且我的程序也更加清楚、有意义。</p>
<p>好了，今天要说的就是这些。</p>
<p>P.S. FlashWeb上线，放到 <a href="http://i.coolcfan.org">http://i.coolcfan.org</a> 了<br />
P.S.2 看来我应该装一个代码高亮的插件……可是哪个插件支持ActionScript 3呢？</p>
<hr />
<p><span style="font-size: large; color: #ff0000;"><a href="http://dante.im/singleton-trick-in-as3/">永久链接：点这里打开文章页</a></span></p>
<p><small><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/80x15.png" /></a> coolcfan @ <a href="http://dante.im">稀饭说</a>, 2008. |
<a href="http://dante.im/singleton-trick-in-as3/#comments">有 4 个评论</a> |
添加到
<a href="http://del.icio.us/post?url=http://dante.im/singleton-trick-in-as3/&title=AS3：单例模式的大材小用">del.icio.us</a>
<br/>
日志标签: <a href="http://dante.im/tags/actionscript/" rel="tag">ActionScript</a>, <a href="http://dante.im/tags/flashas/" rel="tag">Flash&amp;AS</a>, <a href="http://dante.im/tags/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f/" rel="tag">设计模式</a><br/>
</small></p>
	<p>相关日志</p>
	<ul class="st-related-posts">
	<li><a href="http://dante.im/introducing-ria/" title="RIA:幻想之门 (2009年01月24日)">RIA:幻想之门</a> (1)</li>
	<li><a href="http://dante.im/design-patterns-stories/" title="[好书第二弹]大话设计模式 (2009年03月3日)">[好书第二弹]大话设计模式</a> (4)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://dante.im/singleton-trick-in-as3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
