适配器模式-C++

2018-03-28  本文已影响0人  tarzipc
#include <iostream>

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;
}

上一篇 下一篇

猜你喜欢

热点阅读