动机
- 在软件系统中,由于应用环境的变化,常常需要将一些现存的对象放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的
定义
- 将一个类的接口转换成客户希望的另一个接口。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
网友评论