定义
适配器模式将一个接口转换成为客户想要的另一个接口,它使接口不兼容的哪些类可以一起工作。比如电脑电源适配器的设计原理就是一个典型的适配器模式,电脑电源作为客户调用电源线接口,电源线作为适配器(公)连接插座(母适配器)取得电。
类与对象的关系
- Target(目标抽象类):定义客户要用的特定领域的接口
- Adapter(适配器):调用另一个接口,作为一个转换器;(公接口)
- Adap(适配器):定义一个接口,Adapter需要接入;(母接口)
- Client(客户调用类)
实例说明
举一个简单的例子,一个公司内部有自己的保洁系统,公司各处都需要清洁,但是对于一些机器设备,不仅要清洁,还要定期维护,这时候,不需要对原来的清洁类(Clean)做任何更改,我们只需要增加一个适配器类(Extraclean)以适用于需要定期维护的设备,这个过程可以用适配器模式实现,下面是简单的C++过程:
//适配器模式 ----- 保洁系统
#include <iostream>
using namespace std;
class Clean
{
public:
virtual void makeclean () = 0;
};
class office : public Clean
{
public:
void makeclean ()
{
cout << "办公室清洁" << endl;
}
};
class corridor : public Clean
{
public:
void makeclean()
{
cout << "过道清洁" <<endl;
}
};
//对于设备,不仅要清洁,还需要维护
class Extraclean : public Clean
{
public:
virtual void takecare() = 0;
};
class equipment : public Extraclean
{
public:
void makeclean()
{
cout << "设备清洁" << endl;
}
void takecare()
{
cout << "设备维护" << endl;
}
};
class Client
{
public:
static void jobs (int type, Clean *c)
{
if (NULL == c || type < 0)
{
return;
}
if (type == 1)
{
c -> makeclean();
((Extraclean*)c) -> takecare();
}
else
{
c -> makeclean();
}
}
};
int main()
{
Extraclean *e = new equipment();
Client :: jobs(1,e);
Clean *c1 = new office();
Clean *c2 = new corridor();
Client ::jobs(0,c1);
Client ::jobs(0,c2);
cout << endl;
delete c2;
delete c1;
delete e;
return 0;
}
运行结果: