C++适配器模式(Adapter)

 C++
时间:

使用场景

  1. 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码。

  2. 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

  3. 有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。

Adapter

#include<iostream>

using namespace std;

#ifndef _OBJECT

class Target
{
    public:
        Target() {}
        virtual ~Target() {}
        virtual void Request() { cout << "Target::Request" << endl; }
    protected:
    private:
};

class Adaptee
{
    public:
        Adaptee() {}
        ~Adaptee() {}
        void SpecificRequest() { cout << "Adaptee::SpecificRequest" << endl; }
    protected:
    private:
};

class Adapter : public Target, private Adaptee
{
    public:
        Adapter() {}
        ~Adapter() {}
        void Request() { this->SpecificRequest(); }
    protected:
    private:
};

#else

class Target
{
    public:
        Target() {}
        virtual ~Target() {}
        virtual void Request() { cout << "Target::Request" << endl; }
    protected:
    private:
};

class Adaptee
{
    public:
        Adaptee() {}
        ~Adaptee() {}
        void SpecificRequest() { cout << "Adaptee::SpecificRequest object" << endl; }
    protected:
    private:
};

class Adapter : public Target
{
    public:
        Adapter(Adaptee* ade) { _ade = ade; }
        ~Adapter() {}
        void Request() { _ade->SpecificRequest(); }
    protected:
    private:
        Adaptee *_ade;
};

#endif

int main(int argc, char* argv[])
{
    #ifndef _OBJECT
        Target* adt = new Adapter();
    #else
        Adaptee* ade = new Adaptee;
        Target*adt = new Adapter(ade);
    #endif
    adt->Request();

    return 0;
}

0 评论