將一個類的接口轉換成客戶需要的另外一個接口。使得原本不兼容而不能在一起工作的類可以一起工作
適用:
你想使用一個類,而他的接口不符合你的要求
你想創建一個可復用的類,該類可以與其他不相關的類或是不可預見的類協同工作,或是使用多重繼承的方法避免
UML圖:
采用繼承原有接口類的方式

采用組合原有接口類的方式

解析:
Adapt模式其實就是把完成同樣的一個功能但是接口不能兼容的類橋接在一起使之可以在一起工作,這個模式使得復用舊的接口成為可能.
//test.h
//////////////////////////////////////////////////////////////////////////
//需要被Adapt的類
class Target
{
public:
Target(){}
virtual ~Target(){}
virtual void Request() = 0;
};
//與被Adapt對象存在不兼容接口的類,或是這個類與target類毫無關聯,去想在同一個類中使用兩個類的函數.
class Adaptee
{
public:
Adaptee(){}
~Adaptee(){}
void SpecialRequest();
};
//進行Adapt的類,聚合原有接口類
class Adapter : public Target
{
public:
Adapter(Adaptee* pAdaptee);
virtual ~Adapter();
virtual void Request(); //重載了接口且進行了聚合
private:
Adaptee* m_Adaptee;
};
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include "stdlib.h"
#include "test.h"
using namespace std;
//////////////////////////////////////////////////////////////////////////
void Adaptee::SpecialRequest()
{
cout << "specialRequest of Adaptee\n";
}
Adapter::Adapter(Adaptee* pAdaptee) : m_Adaptee(pAdaptee)
{
}
Adapter::~Adapter()
{
delete m_Adaptee;
m_Adaptee = NULL;
}
void Adapter::Request()
{
cout << "Request of Adapter\n";
m_Adaptee->SpecialRequest();
}
//////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
Adaptee *pAdaptee = new Adaptee;
Target *pTarget = new Adapter(pAdaptee);
pTarget->Request();
delete pTarget;
system("pause");
return 0;
}



Target()

