- 当你希望使用某个类, 但是其接口与其他代码不兼容时, 可以使用适配器类。
#include <iostream>
#include <string>
using namespace std;
class Target
{
public:
virtual ~Target() = default;
virtual std::string request()const
{
return "Target: The default target‘s behavior.";
}
};
/************************************************************************/
/* adaptee 的接口和现在的客户端接口不匹配,adaptee需要一些调整才可以被客户端使用 */
/************************************************************************/
class Adaptee {
public:
std::string SpecificRequest() const {
return ".eetpadA eht fo roivaheb laicepS";
}
};
/************************************************************************/
/* adapter 将adaptee的接口和target的接口兼容 */
/************************************************************************/
class Adapter : public Target {
private:
Adaptee *adaptee_;
public:
Adapter(Adaptee *adaptee) : adaptee_(adaptee) {}
std::string request() const override {
std::string to_reverse = this->adaptee_->SpecificRequest();
std::reverse(to_reverse.begin(), to_reverse.end());
return "Adapter: (TRANSLATED) " + to_reverse;
}
};
void ClientCode(const Target *target) {
std::cout << target->request();
}
int main() {
std::cout << "Client: I can work just fine with the Target objects:\n";
Target *target = new Target;
ClientCode(target);
std::cout << "\n\n";
Adaptee *adaptee = new Adaptee;
std::cout << "Client: The Adaptee class has a weird interface. See, I don‘t understand it:\n";
std::cout << "Adaptee: " << adaptee->SpecificRequest();
std::cout << "\n\n";
std::cout << "Client: But I can work with it via the Adapter:\n";
Adapter *adapter = new Adapter(adaptee);
ClientCode(adapter);
std::cout << "\n";
delete target;
delete adaptee;
delete adapter;
return 0;
}
原文:https://www.cnblogs.com/ultramanX/p/14778144.html