适配器模式

在实际软件系统设计和开发中,经常会遇到这样的问题。为了完成快速某项工作,有时会选择购买第三方库。

但是可能会带来这样的问题:我们的应用程序已设计好的接口和第三方提供的接口不一致。为了让这些接口不兼容的类可以在一起工作,适配器(Adapter)模式就可以大显身手了。 它可以将一个类(第三方库)的接口转化为客户希望的接口。

适配器模式可以分为两种:类模式的Adapter采用继承的方式继承Adaptee的接口,而对象模式的Adapter则采用组合的方式实现对adaptee的复用。

 以电压转化为例:

类模式:

形如:

 代码:

#include <iostream>
using namespace std;

class Target
{
public:
    virtual ~Target(){}
public:
    virtual void use5v()
    {
        cout << "工作电压为5v" << endl;
    }
};

class Adaptee
{
public:
    void use220V()
    {
        cout << "工作电压为220v" << endl;
    }
};

// 适配器
class Adapter : public Target, private Adaptee
{
public:
    virtual void use5v()
    {
        cout << "适配220v" << endl;
        this->use220V();
    }

};


void test()
{
    Target *target = new Adapter();
    target->use5v();
    delete target;
}

int main()
{
    test();
    cin.get();
    return 0;
}

通过private继承Adaptee获得实现继承的效果,而通过public继承Target实现接口继承的效果

对象模式:

代码:

#include <iostream>
using namespace std;

class Target
{
public:
    virtual ~Target(){}
public:
    virtual void use5v()
    {
        cout << "工作电压为5v" << endl;
    }
};

class Adaptee
{
public:
    void use220V()
    {
        cout << "工作电压为220v" << endl;
    }
};

// 适配器
class Adapter : public Target
{
public:
    Adapter(Adaptee *t) :_adaptee(t){}
    virtual void use5v()
    {
        cout << "适配220v" << endl;
        _adaptee->use220V();
    }

private:
    Adaptee *_adaptee;
};


void test()
{
    Adaptee *adaptee = new Adaptee();
    Target *target = new Adapter(adaptee);
    target->use5v();
    delete adaptee;
    delete target;
}

int main()
{
    test();
    cin.get();
    return 0;
}
原文地址:https://www.cnblogs.com/hupeng1234/p/6769997.html