适配器模式是结构型设计模式之一,通过适配器模式可以改变已存在的类的接口形式。
案例:手机充电需要5V的直流电源,但是市电是220V交流电源。要想让手机能够正常充电,中间需要一个电源适配器,来将不能被手机直接使用的市电电源转为5V的直流电源。
针对上述案例,UML图如下:
适配器适用于将一个类的接口转换为客户希望的另一个接口,使得原本由于接口不兼容不能参与工作的类可以一起工作。
//源函数接口,用户无法直接使用
class ac220V
{
public:
void UseAc220V()
{
printf("Source: Ac 220V\n");
}
};
//用户希望的函数接口
class dc18V
{
public:
virtual void UseDc18V() = 0;
};
//适配器职责是实现用户所希望使用的接口
class Adapter : public dc18V
{
public:
Adapter() : m_ac220V(new ac220V) {}
~Adapter() { delete m_ac220V; }
void UseDc18V()
{
m_ac220V->UseAc220V();
printf("-> source: Dc 5V\n");
}
private:
ac220V *m_ac220V;
};
int main(void)
{
ac220V* ac = new ac220V;
Adapter* adapter = new Adapter;
adapter->UseDc18V(); //adapter提供的接口是用户所需要的,直接使用
return 0;
}
编译运行: