美文网首页
适配器模式-C++

适配器模式-C++

作者: tarzipc | 来源:发表于2018-03-28 20:05 被阅读0次
    #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;
    }
    
    

    相关文章

      网友评论

          本文标题:适配器模式-C++

          本文链接:https://www.haomeiwen.com/subject/agiucftx.html