适配器模式(Adapter):
将一个类的接口转换成客户希望的;另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
也就是系统的数据和行为都正确,但接口不符合时,我们应该考虑用适配器,目的是使控制范围以外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比如在需要对早期代码复用一些功能等应用上很有实际价值。
何时使用适配器模式?
1.使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑使用适配器模式。
2.客户代码可以统一调用同一接口就行了,这样应该可以更简单、更直接。更紧凑。
3.我们通常是在软件开发后期或者是开发过程中使用别人的模块才使用这个模式。
4.在双方都不太容易修改的时候再使用适配器模式适配,而不是一有不同时就使用它。
下面是实现代码,很简单。
#pragma once
#include <string>
#include <iostream>
using namespace std;
//Target 这是客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口
class CTarget
{
public:
virtual void Request() = 0;
};
//Adaptee 需要适配的类
class CAdaptee
{
public:
void SpecificRequest()
{
cout<<"特殊请求"<<endl;
}
};
//Adapter 通过在内部包装一个Adaptee对象,把源接口转换成目标接口
class CAdapter : public CTarget
{
private:
CAdaptee * m_pAdaptee;
public:
CAdapter(){m_pAdaptee = new CAdaptee();}
~CAdapter(){delete m_pAdaptee;}
void Request()
{
m_pAdaptee->SpecificRequest();
}
};
客户端调用代码:#include "stdafx.h"
#include "AdapterMode.h"
#include <windows.h>
using namespace std;
int main()
{
CTarget *pTarget = new CAdapter();
pTarget->Request();
delete pTarget;
return 0;
}
运行结果:比较简单就不多说了。