48 lines
1.0 KiB
C++
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");
|
|
}
|