先说 适配器,比如 美标的转换插座、海淘电器用的110V到220V变压器、还有安卓到苹果的usb转换接头,这些都是非常常见的适配器的案例。
Adapter模式将一个类的接口转换成另外一个接口。使得原本由于接口不兼容而无法使用的类可以被正常调用。
适配器模式 的类图如下:
其中 Target 为需要适配的目标接口,Adaptee是需要被适配的模块,Adapter适配器作为中间的桥梁。
适配器模式 的核心在于封装,我们通过一段代码来说明:
// 计算模块
class Computer
{
public:
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
};
// 调用模块
void main(int a, int b, int& c)
{
Computer cp;
// 执行计算 - 接口不兼容
cp.add(a,b, c);
}
// 适配器Adapter
class ComputerX
{
public:
void add(int a, int b, int& c);
void sub(int a, int b, int& c);
void mul(int a, int b, int& c);
protected:
Computer cp;
};
针对上面执行计算时接口不兼容的问题,我们可以通过Adapter模式,封装一个新的类 ComputerX,兼容上层调用接口。
// 调用模块
void main(int a, int b, int& c)
{
ComputerX cp;
// 执行计算 - 已兼容
cp.add(a,b, c);
}
这样做的优势在于不论上层模块还是下层模块,不用对其进行修改,能够有效降低修改带来的非预期错误。