简介
适配器模式:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
构成
适配器(Adapter)模式结构包括的角色有目标(Target)角色、源(Adaptee)角色和适配器(Adapter)角色。
目标(Target)角色:这就是所期待的接口,定义了客户所期望的操作。目标(Target)角色可以是具体类或抽象类。该角色不可缺少。
源(Adaptee)角色:这是我们原有的产品,也是需要被适配的产品。这是我们原有的产品,也是需要被适配的产品:源(Adaptee)角色可以用接口、抽象类和具体类来实现。该角色不可缺少。
适配器(Adapter)角色:适配器角色是本模式的核心。Adapter对Adaptee接口与Target接口进行适配,适配器把源接口转换成目标接口,在Target目标角色与Adaptee源角色之间提供一种过渡,即把Adaptee源角色所提供的接口转换为Target目标角色所提供的接口。适配器(Adapter)角色必须是具体类。该角色不可缺少。
常用的场景
使用第三方库的时候,第三方的库肯定不能适用所有的系统,所以需要一个适配器来转换。
优点
1.屏蔽了具体的实现方式,实现了依赖倒转。
2.可以把不统一的接口封装起来,使之成为统一的接口。
3.把本来不方便适用的接口转换成统一的接口。
测试代码
#include <iostream>
#include <assert.h>
#include <vector>
using namespace std;
//目标类
class FBaseBook
{
public:
void readA(){};
void readB(){};
};
//正常类
class FChineBook : public FBaseBook
{
public:
void readA(){};
void readB(){};
};
class FForigenBook
{
public:
void readA1(){};
void readB1(){};
};
//翻译
class FAdapteeBook : public FBaseBook
{
public:
void readA()
{
m_oFBook->readA1();
};
void readB()
{
m_oFBook->readB1();
};
void setBook(FForigenBook* book)
{
m_oFBook = book;
}
private:
FForigenBook* m_oFBook;
};
void main()
{
FForigenBook m_oBook;
FAdapteeBook m_oBook1;
m_oBook1.setBook(&m_oBook);
m_oBook1.readA();
m_oBook1.readB();
}