7 结构型模式-----适配器模式

模式动机:有时软件复用的一个难题就是接口的不兼容性,适配器的职责就是为客户提供兼容的适配者接口,使得客户只需访问一类接口就可以调用合适的适配者,而其中的适配细节则有适配器来完成。

模式定义(Adapter Pattern)将一个接口转换为用户期望的接口,使得那些接口不兼容的类可以一起工作。

模式结构图:

模式代码:

bt_适配器模式.h

#ifndef AP_H
#define AP_H
#include <iostream>

using namespace std;

/*
    定义抽象目标类
*/
class Target
{
public:
    virtual ~Target(){ }
    virtual void request() = 0;
};

/*
    适配者类
*/
class Adaptee
{
public:
    void specificRequest()
    {
        cout << "成功调用适配者方法" << endl;
    }
};

/*
    适配器类
*/
class Adapter : public Target
{
public:
    virtual void request()
    {
        pa->specificRequest();
    }

private:
    Adaptee* pa;    // 指向合适的适配者
};

#endif // AP_H

测试用例.cpp

#include "bt_适配器模式.h"

int main()
{
    cout << "***** 适配器模式测试 *****" << endl;
    Target* target = new Adapter;   // 实例化一个与目标关联的适配器
    target->request();                // 客户端调用

    delete target;

    return 0;
}

模式分析:该模式将目标类和具体适配者类解耦,增加了系统的灵活性和可扩展性,更换适配器时比较方便,不需要修改已有类,符合“开闭原则”。但是若需要更换一个已有的Adaptee方法比较麻烦,需要借助Adaptee的子类才能完成。同时如果想让一个Adapter与多个Adaptee(Adaptee及其子类)同时工作,也必须生成Adaptee的子类,并且需要在Adapter类中调用Adaptee子类的方法。

猜你喜欢

转载自blog.csdn.net/u014725884/article/details/90108207