适配器模式-C++

#include 

using namespace std;

class Duck {
public:
    virtual ~Duck() = default;
    virtual void Quack() = 0;
    virtual void Fly() = 0;
};

class Turkey {
public:
    virtual ~Turkey() = default;
    virtual void Gobble() = 0;
    virtual void Fly() = 0;
};

class ConcreteTurkey : public Turkey {
public:
    void Gobble() override { cout << "Turkey Gooble" << endl; }
    void Fly() override { cout << "Turkey Fly." << endl; }
};

class ConcreteDuck : public Duck {
public:
    void Quack() override { cout << "Quack." << endl; }
    void Fly() override { cout << "ConcreteDuck Fly." << endl; }
};

//对象适配器,也即组合方式实现适配
class DuckAdapter : public Duck {
public:
    DuckAdapter(Turkey &turkey) : _turkey(turkey) { }

    void Quack() override { _turkey.Gobble(); }
    void Fly() override { _turkey.Fly(); }

private:
    Turkey &_turkey;
};

//类适配器, 多继承方式, 这里直接继承具体的类,而非接口或抽象类
class DuckAdapterClass : public ConcreteDuck, public ConcreteTurkey {
public:
    void Quack() override { ConcreteTurkey::Gobble(); }
    void Fly() override { ConcreteTurkey::Fly(); }
};

void UseDuck(Duck &duck) {
    duck.Quack();
    duck.Fly();
}

int main() {
    ConcreteTurkey cturkey;
    DuckAdapter duck_adapter(cturkey);
    UseDuck(duck_adapter);

    DuckAdapterClass duck_adapter_class;
    UseDuck(duck_adapter_class);

    return 0;
}

你可能感兴趣的:(适配器模式-C++)