|
一、 起因
在看《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(Don’t 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] 下一页 [Web开发]AJAX来判断dedecms用户是否登录 [网页制作]新手解读:认识XML,AJAX,SNS,Tag [网页制作]从GMail认识的W3C网页标准和Ajax [Web开发]利用PHP+JavaScript打造AJAX搜索窗 [Web开发]基于AJAX技术提高搜索引擎排名 [Web开发]XMLHTTP异步获取返回值的代码超时测试(AJAX) [Web开发]整理Web开发-Ajax社区中有关Ajax的资料 [Web开发]【编程】Web 交互 - AJAX 不是什么新技术 [Web开发]掌握 Ajax,第 1 部分: Ajax 简介 [Web开发]Backbase框架:专业级AJAX开发框架
|