1、適配器模式的提出
在軟件功能開發(fā)中,由于使用環(huán)境的改變,之前一些類的舊接口放在新環(huán)境的功能模塊中不再適用。如何使舊接口能適用于新的環(huán)境?適配器可以解決此類問題。適配器模式:通過增加一個適配器類,在適配器接口中做一些適配操作,將舊模塊類轉換成使用者Client類期望的接口。
2、需求模式
有一個舊模塊類OlderMoudle,該類擁有一個OlderRequest接口,由于使用者Client環(huán)境的改變,之前Client不再能夠直接使用OlderRequest接口。設計Client能訪問OlderRequest接口的功能代碼。
3、適配器模式的代碼實現(xiàn)
(1)UML圖如下:
(2)代碼實現(xiàn)如下:
#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;
}
程序運行結果如下:文章來源:http://www.zghlxwxcb.cn/news/detail-656854.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-656854.html
到了這里,關于設計模式之適配器模式(Adapter)的C++實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!