适配器模式
概念
是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式。
角色和职责
Target:
目标类,也就是客户端希望使用的类,里面有希望得到的接口–对应案例中的18V。Adapter
适配器,将实际接口转换为希望使用的接口,适配器继承自目标类。–对应案例中的Adapter。
- Adaptee
待适配的类,实际提供的类,通过适配器的功能,客户端可以使用其提供的实际类!–对应案例中的220V。
案例
#include <iostream>
using namespace std;
/*客户端希望使用的接口类*/
class Current18V
{
public:
virtual void useCurrent18v() = 0;//希望使用的接口
};
/*提供实际接口的类*/
class Current220V
{
public:
void useCurrent220v()//实际接口
{
cout<<"i am 220v"<<endl;
}
};
/*适配器--为了将实际接口转换为希望使用的接口
--继承自希望使用的接口类
--有一个有参构造函数
--有一个实际接口类的对象或者指针作为成员变量--
--在希望使用的接口类的虚函数里调用实际类的接口达到转换的目的*/
class Adapter : public Current18V
{
public:
Adapter(Current220V* current)//有参构造函数--形参是关于实际接口的成员变量
{
m_current = current;
}
//适配器的虚函数里调用实际类提供的接口--进行转换
//这就是对外提供的接口--也是客户端希望使用的接口
virtual void useCurrent18v()
{
cout<<"use 220v"<<endl;
m_current->useCurrent220v();//调用实际提供的接口
}
private:
Current220V* m_current;//适配器有一个关于实际接口的成员变量
};
int main()
{
Current220V * current220v = new Current220V;//实际接口
Adapter *adapter = new Adapter(current220v);//适配器
adapter->useCurrent18v();//适配器调用期望接口--实质在虚函数调用实际接口
/*回收内存*/
delete adapter;
delete current220v;
return 0;
}