Adapter 适配器

动机

  • 在软件系统中,由于应用环境的变化,常常需要将一些现存的对象放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的

定义

  • 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

要点

  • Adapter模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,在遗留代码复用、类库迁移等方面很有用

示例

#include <cstdio>


//遗留接口(老接口)
class COld
{
public:
    virtual void DealPart0(int nValue) = 0;
    virtual void DealPart1(const char* pStrC) = 0;
};

//旧接口的具体实现类
class COldChild : public COld
{
public:
    virtual void DealPart0(int nValue) { printf("%d\n", nValue); }
    virtual void DealPart1(const char* pStrC) { printf("%s\n", pStrC); }
};

//目标接口(新接口)
class CNew
{
public:
    virtual ~CNew(){}
    virtual void Deal() = 0;
};

//适配器
class CAdapter : public CNew
{
protected:
    COld* pOld_;

public:
    CAdapter(COld* pOld) { this->pOld_ = pOld; }

    //实现了旧接口转为新接口
    void Deal()
    {
        pOld_->DealPart0(1);
        pOld_->DealPart1("Hello");
    }
};

int main()
{
    COldChild OldChild;
    CNew* pNew = new CAdapter(&OldChild);
    pNew->Deal();
    /*
    1
    Hello
    */

    return 0;
}

例子

  • STL中的stack、queue就是适配器,转换了其他容器的接口

https://www.bilibili.com/video/av24176315/?p=16

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.意图 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些...
    10xjzheng阅读 2,642评论 0 0
  • 什么是适配器?在真实世界中我们会接触到各种各样的适配器,例如上图的电源适配器。将两座的电源接口转换为 USB 接口...
    sim_cai阅读 3,093评论 0 1
  • 动机 适配器模式是类和对象之间的适配。同现实生活中的适配器一样,它用于两个物体间的接合和桥接。现实生活里我们有电源...
    holysu阅读 4,881评论 0 0
  • 适配器模式的介绍 适配器模式是将两个不兼容的类融合在一起,它有点像粘合剂,将不同的东西转换使它们能够在一起工作。在...
    再见信仰阅读 2,828评论 0 0
  • 连续闷热多日,似乎天气也憋不住了,终于下了一场雨。 手拿几颗葡萄,在屋檐下躲雨,淅淅沥沥的雨滴,葡萄更显剔透。 嘴...
    Star木纹烛阅读 3,226评论 0 1

友情链接更多精彩内容