适配器模式适用于将不一致的接口转换为一致的接口。
比如,去香港玩儿,带上了自己的笔记本电脑,结果晚上插电时就抓瞎了,电源插孔与插座不一致。WTF……
插座是酒店装好的,不可能拆了换一个,电源是自己的,也不可能说重新买一个,只有买个转换器了。
通过转换器,将我们不适配的插头转换成适配的插头。
CTarget外部接口,理解为所需要插头样式;
CAdapter为适配器(转换器),将不适配插头(CAdaptee)转换为适配样式;
CAdaptee为待适配类,理解为需要转换插头样式的插头。
C++示例
ITarget.h
#pragma once
class ITarget
{
public:
ITarget(void);
virtual ~ITarget(void);
public:
void Request();
};
ITarget.cpp
#include "ITarget.h"
#include <iostream> ITarget::ITarget(void)
{
} ITarget::~ITarget(void)
{
} void ITarget::Request()
{
std::cout<<"Target"<<std::endl;
}
Adapter.h
#pragma once
#include "itarget.h"
#include "Adaptee.h" class Adapter :
public ITarget
{
public:
Adapter(void);
Adapter(Adaptee* tee);
~Adapter(void);
public:
void Request();
private:
Adaptee* mAde;
};
Adapter.cpp
#include "Adapter.h" Adapter::Adapter(void)
{
} Adapter::Adapter(Adaptee* tee)
{
this->mAde = tee;
} Adapter::~Adapter(void)
{
} void Adapter::Request()
{
mAde->Request();
}
Adaptee.h
#pragma once
class Adaptee
{
public:
Adaptee(void);
~Adaptee(void);
public:
void Request();
};
Adaptee.cpp
#include "Adaptee.h"
#include <iostream> Adaptee::Adaptee(void)
{
} Adaptee::~Adaptee(void)
{
} void Adaptee::Request()
{
std::cout<<""<<std::endl;
}
main.cpp
#include "Adaptee.h"
#include "Adapter.h" int main()
{
Adaptee* ade = new Adaptee();
Adapter* pTarget = new Adapter(ade);
pTarget->Request();
return ;
}