06_桥接模式

桥接模式

 

桥接模式的作用在于“将抽象与其实现隔离开来,以便二者独立变化”。这种模式对于javascript中常见的事件驱动编程大有裨益。

 

桥接模式最常见和实际的应用场合之一就是事件监听器的回调函数。

假设有一个名为getUserById的函数,它根据一个标识符返回某个用户的信息,在web程序中,可能希望用户执行某种操作(例如点击一个button)的时候获取信息。而被点击的元素很有可能具有这个标识符信息,例如button具有id属性。

下面是一种做法:

addEventListener(element,click,getUserById);

function getUserById(e){

var id=this.id;

asyncRequest(“GET”,”user.uri?id=”+id,function(res){

//处理结果

});

}

 

可以看出,这段API只能工作在浏览器中。如果要对这段代码做单元测试,或者在命令行中执行,那就非常不便。一个良好的API不能与特定的实现搅在一起。

下面是改进:

function getUserById(id,callback){

asynRequest(“GET”,”user.uri?id=”+id,function(res){

callback(res);

});

} //这个版本会实用得多!

 

此时想要在web中使用也很简单:

addEvent(element,’click’,getUserByIdBridge);

function getUserByIdBridge(e){

getUserById(this.id,function(user){

console.log(user);

});

}

上面这层桥接元素将公开的API和具体实现隔离开来,这样也使得API的适用范围大大扩宽了。

 

从类的角度来看,意味着把接口作为公开的代码编写,把类的实现作为私有代码编写。

 

 

 

现实生活中用桥梁连接多个事物,js中也是如此。

var Class1=function(a,b,c){

this.a=a;

this.b=b;

this.c=c;

}

var Class2=function(d){

this.d=d;

}

var BridgeClass=function(a,b,c,d){

this.one=new Class1(a,b,c);

this.two=new Class2(d);

}

看起来桥接元素只是为了方便,实际上它扮演的就是一个门面类的角色。但是,这里使用桥接模式的目的是为了让Class1Class2能够独立于BrigdeClass而改变,这与门面类是不同的!说到底,桥接元素应该是粘合每一个抽象的粘合因子。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值