將一個類別的介面轉換成客戶希望的另一個介面。Adapter 模式使得原本因為介面不相容而不能一起工作的那些類別可以一起工作。
類別適配器(繼承)

物件適配器(組合)

#ifndef ADAPTER_H
#define ADAPTER_H
class Target {
public:
Target() {}
virtual ~Target() {}
virtual void Request() = 0;
};
class Adaptee {
public:
Adaptee() {}
~Adaptee() {}
void SpecialRequest();
};
class Adapter : public Target {
public:
Adapter(Adaptee* pAdaptee);
virtual ~Adapter();
virtual void Request();
private:
Adaptee* m_pAdaptee;
};
#endif
#include "Adapter.h"
#include <iostream>
void Adaptee::SpecialRequest() {
std::cout << "SpecialRequest of Adaptee\n";
}
Adapter::Adapter(Adaptee* pAdaptee) : m_pAdaptee(pAdaptee) {}
Adapter::~Adapter() { delete m_pAdaptee; m_pAdaptee = nullptr; }
void Adapter::Request() {
std::cout << "Request of Adapter\n";
m_pAdaptee->SpecialRequest(); // 轉發
}
#include "Adapter.h"
#include <cstdlib>
int main() {
Adaptee* pAdaptee = new Adaptee();
Target* pTarget = new Adapter(pAdaptee);
pTarget->Request(); // 透過 Target 介面呼叫 Adaptee 功能
delete pTarget;
return 0;
}
std::stack/std::queue 適配 deque、std::function 適配各種可呼叫物件。