design_patterns/07_adapter.cpp
Yuki c49faa4780
feat: Adapter
Implemented a demo for the Adapter.
2025-04-06 02:47:26 +08:00

48 lines
1.0 KiB
C++

#include <iostream>
#include <memory>
using namespace std;
class Target {
string s;
public:
Target(string s) : s(s) {}
virtual ~Target() = default;
virtual void request(const string& contents) {
cout << s << " send request to server: " << contents << endl;
}
};
class Adaptee {
public:
int value;
Adaptee(int value) : value(value) {}
};
class Adapter : public Target {
shared_ptr<Adaptee> a;
public:
Adapter(shared_ptr<Adaptee> a) :
Target("User " + to_string(a->value)), a(a) {}
virtual void request(const string& contents) override {
cout << "Adapted request" << endl;
Target::request(contents);
}
};
int main() {
shared_ptr<Target> t = make_shared<Target>("User A");
t->request("Hello");
shared_ptr<Adaptee> adaptee = make_shared<Adaptee>(42);
// Obviously this is invalid.
// a->request();
// But it works with adapter.
shared_ptr<Target> adapter = make_shared<Adapter>(adaptee);
adapter->request("Bye");
}