1、适配器模式的提出
在软件功能开发中,由于使用环境的改变,之前一些类的旧接口放在新环境的功能模块中不再适用。如何使旧接口能适用于新的环境?适配器可以解决此类问题。适配器模式:通过增加一个适配器类,在适配器接口中做一些适配操作,将旧模块类转换成使用者Client类期望的接口。
2、需求模式
有一个旧模块类OlderMoudle,该类拥有一个OlderRequest接口,由于使用者Client环境的改变,之前Client不再能够直接使用OlderRequest接口。设计Client能访问OlderRequest接口的功能代码。
3、适配器模式的代码实现
(1)UML图如下:
(2)代码实现如下:
#include <iostream>
class Target
{
public:
virtual void request()=0;
virtual ~Target(){};
};
class OlderMoudle
{
public:
void OlderRequest()
{
std::cout << "OlderMoudle OlderRequest" << std::endl;
}
};
class Adapter:public Target
{
private:
OlderMoudle *m_pModule;
public:
Adapter(OlderMoudle* p):m_pModule(p){};
virtual void request() override
{
//... todo adapter
std::cout << "Adapter request" << std::endl;
m_pModule->OlderRequest();
}
};
class Client
{
private:
Target* m_pTarget = nullptr;
public:
Client(OlderMoudle* p){
m_pTarget = new Adapter(p);
};
void DoWork()
{
m_pTarget->request();
}
~Client()
{
if(m_pTarget != nullptr)
{
std::cout << "Client ~Client" << std::endl;
delete m_pTarget;
m_pTarget = nullptr;
}
}
};
int main()
{
OlderMoudle *pOlderModule = new OlderMoudle();
Client obj(pOlderModule);
obj.DoWork();
delete pOlderModule;
pOlderModule = nullptr;
return 0;
}
程序运行结果如下: