适配器模式
#include <iostream> #include <memory> class Adaptee { public: void concreteShow() { std::cout << "In Adaptee concreteShow()." << std::endl; } }; class Target { public: virtual void request () { std::cout << "In Target Show()." << std::endl; } }; class Adapter1 : public Target { public: Adapter1(std::shared_ptr<Adaptee> a) { this->a = a; } void request() override { a->concreteShow(); } private: std::shared_ptr<Adaptee> a = nullptr; }; class Adapter2 : public Target, public Adaptee { public: void request() override { concreteShow(); } }; int main(int argc, char *argv[]) { std::unique_ptr<Target> t = std::make_unique<Target>(); t->request(); std::shared_ptr<Adaptee> a = std::make_shared<Adaptee>(); t = std::make_unique<Adapter1>(a); t->request(); t = std::make_unique<Adapter2>(); t->request(); return 1; }