宝哥软件园

JavaScript适配器模式的详细说明

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

适配模式可用于在现有接口和不兼容的类之间进行适配。使用这种模式的对象也被称为包装器,因为它们用新的接口包装另一个对象。

基本理论

适配器模式:在不修改客户端代码的情况下,将一个接口转换为客户端需要的接口,这样不兼容的代码可以协同工作。适配器主要由三个角色组成:

(1)客户端:调用接口类;(2)适配器:连接客户端接口和提供服务的接口类;(3)适配器:提供服务但与客户端接口要求不兼容的服务类。

这里有一个关于两个数相加的例子。

首先,有一个服务和客户端可以实现两个数字的相加。

(1)首先介绍接口检查类——检查实现接口的类是否实现了接口中使用的方法。

//(定义一个静态方法,实现接口和实现类的直接验证。//静态方法不应该写出Interface.prototype,因为它写在接口的原型链上。//我们需要将静态函数直接写到类级别。//定义接口类var Interface=function (name,Methods){//name:Interface name if(arguments . length 2){ alert('必须是两个参数')} this.name=namethis . methods=[];//为(var i=0)定义空数组加载函数名;长度;i ){ if(typeof methods[i]!='string'){ alert('函数名必须是字符串类型');} else { this . methods . push(methods[I]);} }};接口。确保实现=函数(对象){if(参数。length 2){抛出新错误('必须至少有2个参数')返回false} for(var I=1;长度;I){ var inter=arguments[I];//如果是接口,则必须是接口类型if(inter.constructor!=接口){抛出新错误('如果是接口类,必须是接口类型');}//判断接口中的所有方法是否都实现了//遍历函数集为(var j=0;jinter . methods . length;j ){ var方法=inter . methods[j];//接口中的所有函数//对象[方法]传入的函数//最后是判断传入的函数是否与接口中使用的函数匹配if(!object[method]| | type of object[method]!='function' ){//实现类中必须有一个与接口中使用的方法名相同的方法名。抛出新错误('接口中的所有方法都没有在实现类中完全实现')}} }}(2)使用接口类的相同接口。

var InterfaceResult=新接口(' InterfaceResult ',[' add ']);(3)在服务器端增加两个数字

function First(){ this . add=function(x,y){ return x y;} interface . ensureimplement(this,interface result);//接口检查}(4)客户端调用服务器代码

var First=new First();alert(first.add(1,2));//3第二,有一个要求是需要一个新的类库,但是客户端程序不想做大的改动。

(1)在继承相同接口的基础上,类库是

function Second(){ this . add=function(NumberList){///[1,2,3] '1 2 3' eval('1 2 3 ')返回eval(NumberList . join('));} interface . ensureimplement(this,interface result);//检查当前类是否在接口中完全实现了方法。}此时,如果我们需要使用这个类库而客户端做不到,那么就使用之前的调用方法和:

var Second=new Second();alert(second.add(1,3));//不能再这样用了,完全不符合客户端的要求。为了在保持客户端不变的情况下使用新的类库,我们需要使用适配器模式。现在接口变了,用适配器兼容,适应不变的客户端。

使客户端与新接口兼容。

(2)适配器

函数ThirdWarpper(){ this . add=函数(x,y){ var arr=new Array();arr . push(x);arr . push(y);返回新的Second()。添加(arr);} interface . ensureimplement(this,interface result);}(3)客户端代码

//client varthird=new thirdwapper();var结果=third.add(1,8);//通行证号码提醒(结果);使用新类库后的示意图如下:

摘要

从表面上看,适配器模式与外观模式非常相似。他们都必须包装其他对象并更改他们的表示界面。它们之间的区别在于它们如何改变界面。外观元素显示了一个简化的界面,它不提供额外的选择,有时为了方便完成常见任务,它会做一些假设。另一方面,适配器将一个接口转换成另一个接口,这不会过滤掉某些功能或简化接口。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+