APP下载

浅析Ajax中常用的设计模式

2009-04-23赵伍军

新媒体研究 2009年6期
关键词:设计模式

赵伍军

[摘要]Ajax是近几年web应用方面的热点技术,其应用越来越广泛。一般来说传统的web应用中几乎没有使用设计模式,但在Ajax的开发中却涉及到了部分设计模式,就此内容做一个简要的介绍和分析。

[关键词]Ajax 设计模式 Adapter Facade

中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0320032-01

一、Ajax中使用设计模式的原因

尽管Ajax是现在Web技术发展的热点之一,但仍然属于Web应用的范围,而我们知道通常传统的Web应用中几乎没有使用设计模式,那么为何要在Ajax开发中应用设计模式?主要有依稀几点原因:1.Ajax应用中的JavaScript代码越来越复杂,代码库的规模越来越大,需要一种有效组织代码库的手段;2.Javascript编程与其他服务器端编程语言(例如Java语言,C#语言等)相比过于灵活,更需要通过引入设计模式加以控制,使得代码更加的健壮;3.Javascript支持面向对象的开发,为应用设计模式提供了必要的基础;4.设计模式是面向对象开发的精华,应用设计模式可以实现良好的重用和灵活的架构。

二、Adapter和Facade模式

在开发Web应用时,我们都要面对一个问题:如何保证Web应用程序在不同的浏览器上都能正确的显示。Web技术林立,大部分浏览器厂商的实现都或多或少地与这些标准存在差异。有的Web技术标准本身就很含糊,容易引起不同的解释;有的浏览器厂商处于易用的目的,各自通过自己的方式来扩展这些标准。这就造成了不同的浏览器之间的差异。

基于目前Web开发的特点,特别是客户端Javascript脚本的开发,需要面对很多变化和跨平台的挑战,所以,如果应用Adapter和Facade模式,将会非常有益于提高我们软件的可维护性,以及降低总体开发成本。

(一)Adapter模式。Adapter模式是解决接口不一致的问题。在实际的应用程序中,有时候客户端(这里指调用方)想要调用接口与实际上服务器端(这里指被调用方)所提供的接口不一致。出现这种情况,我们可能会有两种选择,一种是修改调用方或者被调用方的接口,使之相互适应。另一种就是在调用方和被调用方之间加入一个适配器(Adapter),让其隐藏两者之间的差异。

在Ajax应用中经常用到的XMLHttpRequest对象,就是需要Adapter模式的一个很好的实例。XMLHttpRequest对象是非W3C(World Wide Web Consortium,万维网联盟)标准,所以,尽管现有的较新的浏览器都支持该对象,但其具体实现是不一致的。在微软的IE浏览器里,XMLHttpRequest是以ActiveXObject的样式实现的。而在Mozilla浏览器里,其又以一种build-in对象的形式实现。

对于我们常用的应用程序来说,我们并不关心这些实现细节,而是如何能够获得一个可以供使用的XMLHttpRequest对象。获得一个可用XMLHttpRequest对象的代码如下所示:

Function createXMLHttpRequest()

{

var CXMLHttpRequest = false;

if (window. XMLHttpRequest)

{

//创建非IE浏览器中XMLHttpRequest对象

CXMLHttpRequest = new XMLHttpRequest();

}

else if(window.SctiveXObject)

{

//创建IE浏览器中的XMLHttpRequest对象

try

{

CXMLHttpRequest = new ActiveXObject (”Msxml2.XMLHTTP”);

}

catch(e1)

{

try

{

CXMLHttpRequest = new ActiveXObject (”Microsoft.XMLHTTP”);

}

catch(e2)

{

//不能创建XMLHttpRequest对象

alert('不能创建异步请求对象!');

}

}

}

return CXMLHttpRequest;

}

该文件中的try……catch语句帮助我们实现了跨平台性,createXMLH

TtpRequest()函数封装了与特定浏览器相关的创建XMLHttpRequest对象的方法,该函数便是一个Adapter。这段代码实现了一个创建XMLHttpRequest

对象的统一接口,并通过委托(delegate)的机制,自动帮助我们用各种方法在不同的平台下实例化一个XMLHttpRequest对象。

(二)Facade模式。Facade实际上是理顺系统间关系,降低系统耦合度的一个常用的办法。有时候,我们的客户端(调用方)所调用的子系统过于复杂。通常,调用方需要连续调用被调用方的多个服务才能完成某种特定的任务。每次调用方重复调用操作都非常麻烦,并且容易出错,所以,我们需要提炼出一些经常用到的操作,组合成一个接口。这样,每次调用方需要该服务时,仅需要调用该Facade接口,便可以轻松执行某项特定任务。在Ajax中,当需要用XMLHttpRequest;对象向服务器请求数据的时候,仅仅为了请求一次数据就需要五个步骤:1.建立XMLHttpRequest;对象;2.指定响应处理函数函数;3.用open方法设置请求方式,URL地址和请求模式;4.用send发送请求;5.监视请求状态,并对相应的状态进行响应处理。

三、总结

本文针对设计模式在Ajax中的应用,选取了Adapter和Facade两种比较典型设计模式,对其进行了简要的分析和介绍。在Ajax中还用到了其他一些设计模式,比如Observer模式、Command模式和Singleton模式,限于篇幅有限,在此不再作一一介绍。如有兴趣,可以查询相关资料。

参考文献:

[1]祝红涛、刘海松、郝军启,Ajax从入门到精通,北京:电子工业出版社,2008.

[2]谭日森,Ajax技术的特点及发展前景,信息科学,2007年21期.

[3]刘娜、郑楠楠,认识Ajax与Ajax的应用,电脑开发与应用,2008年4期.

猜你喜欢

设计模式
“1+1”作业设计模式的实践探索
新媒体下的广告设计教学改革与创新方法研究
智慧图书馆环境下的融贯式服务设计模式研究
信息化教学模式构建研究
设计模式在软件设计中的运用
一种基于Android混合开发模式的软件架构设计
设计模式对软件可维护性影响的定量研究
定制服装的设计模式分析
基于生产者/消费者设计模式的连续音频信号采集系统
浅析基于问题的教学设计模式