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辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容