前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >结构型之适配器模式C++实现

结构型之适配器模式C++实现

作者头像
用户9831583
发布2022-06-16 15:10:41
1890
发布2022-06-16 15:10:41
举报
文章被收录于专栏:码出名企路

需求分析:讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器。

适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

优点:

  • 客户端通过适配器可以透明地调用目标接口。
  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。

缺点:

对类适配器来说,更换适配器的实现过程比较复杂。解决方法:类适配器模式可采用多重继承方式实现, C++ 可定义一个适配器类来同时继承。

主要角色:

  1. 目标接口:当前系统业务所期待的接口,它可以是抽象类或接口。
  2. 适配者类:它是被访问和适配的现存组件库中的组件接口。
  3. 适配器类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

具体案例:

小码路几年前买的联想笔记本电源线丢了,此时身边有小米笔记本的电源线,如何将小米适配器用在联想笔记本上呢?

第一步:原始冲突类

代码语言:javascript
复制
//原始冲突类,需要改变的
//小米适配器
class XmCom
{
    public:
        void ComByXm()
        {
            cout<<"小米适配器仅仅适用小米笔记本"<<endl;
        }
};

第二步:目标接口

代码语言:javascript
复制
//目标类
//联想适配器
class LxCom
{
    public:
        virtual void ComByLx()=0;
};

第三步:适配者类

代码语言:javascript
复制
//类适配器 转换类
//适配者类
class XmToLx:public LxCom,XmCom
{
    void ComByLx()
    {  
        this->ComByXm();
        cout<<"利用小米适配器转换成联想适配器"<<endl;
        
    }
};

第四步:适配器类

代码语言:javascript
复制
//适配器类
class Com
{
    private:
        //抽象类可以实例化其子类
        LxCom *lx=new XmToLx();
        
    public:
        Com(LxCom *lxx){this->lx=lxx;}
        
        void work()
        {
            cout<<"小米适配器可以用在联想笔记本了,联想笔记本正常工作了!"<<endl;
        }
        void Change()
        {
            lx->ComByLx();
        }
};

第五步:主函数

代码语言:javascript
复制
#include "c.h"

int main()
{
    //联想电脑
    LxCom *_lx=new XmToLx();
    Com *com=new Com(_lx);
    com->Change();
    com->work();

    return 0;

}

结果显示:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档