GoF设计模式——适配器模式

GoF设计模式——适配器模式,第1张

文章目录
    • 🍞概念
    • 🍔使用场景
    • 🍟具体的情形
    • 🧀模式的组成结构

🍞概念

适配器模式(Adapter Pattern)为两个不兼容的接口之间提供了桥梁。


它结合了两个独立接口的功能,这种类型的设计模式属于结构型模式。


🍔使用场景

当希望使用某个类(第三方类), 但是其接口与客户端所期待的不兼容时, 可以使用适配器类。


把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。


举个生活中的例子,一个不懂英文的中国人要和美国人沟通,这时候就需要一个翻译者,这个翻译者充当的就是适配器角色。


🍟具体的情形

如果我们实现了一个人脸检测的类,提供了接口给客户端调用。


之后想要替换成第三方库人脸识别类,但是第三方库提供的接口和之前的不一致。


那么就可以采用适配器模式将第三方库变换成客户端所期待的接口。



🧀模式的组成结构

目标(Target)接口:当前系统业务所期待的接口。



适配者(Adaptee)类:它是被访问和适配的第三方现存组件库中的组件接口。



适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。


class MyClass
{
public:
    virtual void identifyizefaces(){qDebug()<<"MyClass face";}
};


class ThirdParty
{
public:
    void recognizeFaces() {qDebug()<<"ThirdParty face";}
};


class Adapter : public MyClass
{
public:
    Adapter(ThirdParty* thirdParty){m_thirdParty = thirdParty;};
    void identifyizefaces(){
       if(m_thirdParty)
       {
           m_thirdParty->recognizeFaces();
       }
    }

private:
    ThirdParty *m_thirdParty = nullptr;

};

int main(int argc, char *argv[])
{
    //原先的调用方式
    MyClass *target = new MyClass();
    target->identifyizefaces();

    //适配之后的调用方式
    ThirdParty *adaptee = new ThirdParty();
    MyClass *adapter = new Adapter(adaptee);
    adapter->identifyizefaces();

    delete target;
    delete adaptee;
    delete adapter;
    return 0;
}

运行结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/579145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存