打印本文 打印本文 关闭窗口 关闭窗口
adapter和facade模式在Ajax中的应用
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4529  更新时间:2009/4/23 11:30:46  文章录入:mintao  责任编辑:mintao

一、     起因

在看《Ajax in action》的时候,看到它在介绍Adapter和Facade两种模式。由于目前Web开发的特色,特别是客户端Js脚本的开发,需要面对很多的变化和跨平台的挑战,所以,如果应用Adapter和Facade模式,将会非常有益于提高我们软件的可维护性,以及降低总体开发成本。

 

二、     什么是Adapter和Facade模式

1、          Adapter模式

1.1、定义:

The Adapter Pattern converts the interface of a class into another interface the clients expect. Adapter lets classes work together that couldn''''t otherwise because of incompatible interfaces.

1.2、解释:

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

   在Adapter模式里,Adapter所起的作用,就是一个接口适配器。一个Adapter类会实现(implements)调用方所期待的接口,并且在类中通过委派(delegate)来调用被调用方,从而实现两种不同接口的连接。

1.3、分类:

Adapter模式分为两种实现方式,一种是对象适配器(Object Adapters)和类适配器(Class Adapters)。其中对象适配器(Object Adapters)通过组合(composition)实现,而类适配器(Class Adapters)通过多继承实现。

1.4、关键点:

模式的关键点在于其意图。Adapter模式的意图很明显,就是为了使两个彼此不兼容的接口兼容,使一个本来并不是调用方所期待的接口看起来跟所期待的一样。

在《Head.First.Design.Patterns》这本书里,有一句话可以非常完美并且有趣的描述Adapter模式:

If it walks like a duck and quacks like a duck, then it might be a turkey wrapped with a duck adapter...

 

2、          Facade模式

2.1、定义:

   The Facade Pattern provides a unified interface to a set of interfaces in subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.

2.2、解释:

Facade模式的意图也是非常明显。有时候,我们的客户端(调用方)所调用的子系统(subsystem,被调用方)过于复杂。通常,调用方需要连续调用被调用方的N个接口才能完成某种特定的任务。每次调用方重复调用操作都非常繁琐,容易出错,所以本着DRY(Dont Repeat Yourself)的原则,我们需要提炼出一些经常用到的操作组合成一个接口。这样,每次调用方执行该功能时,仅需要调用该Facade接口,便可以轻松执行某项特定任务。

2.3、作用

Facade模式的作用主要有两点:

1、              为一个太复杂的子系统(subsystem)提供一个统一的、简单的接口共调用方使用。通常需要DRY的接口都是使用率非常高,并且比较复杂的接口。将该接口提取出来,有益于简化工作,并且统一接口名称。

2、              降低系统的耦合度。一批事物的变化率远大于一个事物。应用Facade模式的情景,一般是由于子系统太复杂。当调用方需要执行某些任务时,需要执行一连串操作。而随着子系统的升级,这一连串操作的变化的可能性是非常大的。但是,不管子系统如何变,这一连串操作所提供的功能或者是意义永远不变。所以,Facade模式有利于降低耦合度。

2.4、关键点:

Facade模式的关键点在于,引入Facade模式主要是为了简化和统一接口。Facade模式的接口一般是子系统的一个“快捷方式”。调用方如果还有其他的复杂功能的话,依然可以直接调用子系统的其他接口。

3、          Adapter和Facade模式的区别

模式的区别就在于,要领会其根本的意图。这里有一句话,描述了Adapter和Facade模式以及Decorator模式(这里可以先不管decorator模式)。

An adapter wraps an object to change its interface, a decorator wraps an object to add new behaviors and responsibilities, and a facade "wraps" a set of objects to simplify.

 

三、     Web开发所面临的问题

Ajax时代的Web开发,有一个共同的特点。由于此时的浏览器端应用再也不是传统的简单页面,而变成了复杂的JavaScript客户端应用程序。所以,随着代码量的上升,要求我们用更加合乎软工的方式去看待Ajax应用程序。如果在此时能够引入各种OO原则及模式,将会提高Ajax应用程序的整体质量。

目前在浏览器端进行JavaScript开发时,主要会面临这么两种问题:

1、              目前的Web开发还比较混乱。各种浏览器对W3C标准的支持都有问题,并不统一。进行Web开发时,尽管我们一直提倡基于Web标准进行开发,但有时我们往往有些力不从心。

2、

[1] [2] [3] [4] [5] [6]  下一页

打印本文 打印本文 关闭窗口 关闭窗口