需求分析:讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器。
适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
优点:
缺点:
对类适配器来说,更换适配器的实现过程比较复杂。解决方法:类适配器模式可采用多重继承方式实现, C++ 可定义一个适配器类来同时继承。
主要角色:
具体案例:
小码路几年前买的联想笔记本电源线丢了,此时身边有小米笔记本的电源线,如何将小米适配器用在联想笔记本上呢?
第一步:原始冲突类
//原始冲突类,需要改变的
//小米适配器
class XmCom
{
public:
void ComByXm()
{
cout<<"小米适配器仅仅适用小米笔记本"<<endl;
}
};
第二步:目标接口
//目标类
//联想适配器
class LxCom
{
public:
virtual void ComByLx()=0;
};
第三步:适配者类
//类适配器 转换类
//适配者类
class XmToLx:public LxCom,XmCom
{
void ComByLx()
{
this->ComByXm();
cout<<"利用小米适配器转换成联想适配器"<<endl;
}
};
第四步:适配器类
//适配器类
class Com
{
private:
//抽象类可以实例化其子类
LxCom *lx=new XmToLx();
public:
Com(LxCom *lxx){this->lx=lxx;}
void work()
{
cout<<"小米适配器可以用在联想笔记本了,联想笔记本正常工作了!"<<endl;
}
void Change()
{
lx->ComByLx();
}
};
第五步:主函数
#include "c.h"
int main()
{
//联想电脑
LxCom *_lx=new XmToLx();
Com *com=new Com(_lx);
com->Change();
com->work();
return 0;
}
结果显示: