Adapter 适配者模式
1、适配器模式
将一个接口转换成客户端需要的接口而不需要去修改客户端代码,使得不兼容的代码可以一起工作。
适配器主要有3个角色组成:
(1)客户端:调用接口的类
(2)适配器:用来连接客户端接口和提供服务的接口的类
(3)适配者:提供服务,但是却与客户端接口需求不兼容服务类
2、简单实例
// 在客户端调用一个方法进行加法计算: var result = add(1,2); // 但是我们没有提供add这个方法,但提供了同样类似功能的sum方法 function sum(v1,v2){ return v1 + v2; } // 为了避免修改客户端和服务端,我们增加一个包装函数: function add (v1,v2){ reutrn sum(v1,v2); }
我们在两个不兼容的接口之间添加一个包装方法,用这个方法来连接二者使其共同工作。这就是一个简单的适配器模式。
3、与其他模式的比较
Vs 代理模式
同样都是创建一个新对象(包装一次),实现对本体的调用。但代理模式是为了管控原有对象(本体)的访问,代理的初衷并不是为兼容,并主张代理与本体对外接口保持一致。
而适配器则是为兼容而生的 “转换器”,并不预处理请求,直接将请求转接给原接口,新接口与原接口名可能不同。
Vs 装饰器模式
装饰者模式的作用是为对象添加功能,可添加多次,形成装饰链。而适配器只会对原有对象包装一次。
Vs 外观模式
外观模式与适配器模式最大的区别,是定义了一个新的接口。