适配器模式定义:
将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式适用场景:
1、希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。在遗留代码复用,类库迁移等方面非常有用;
2、GoF一书中定义俩种适配器,一种是类适配器一种是对象适配器。类适配器采用了“多继承”实现方式,一般不推介使用;对象适配器采用的是“组合”实现方式,更符合松耦合精神。
参考代码如下:
#pragma once
#include<iostream>
using namespace std;
//目标接口
class ITarget
{
public:
virtual void Process() = 0;
};
//遗留接口
class IAdaptee
{
public:
virtual void foo(int data) = 0;
virtual int bar() = 0;
};
//遗留的具体类
class OldClass:public IAdaptee
{
public:
virtual void foo(int data)
{
cout << "OldClass foo" << endl;
}
virtual int bar()
{
cout << "OldClass Bar" << endl;
return 0;
}
};
//继承一个接口实际上是遵循他定义的规范
//对象适配器
class Adapter:public ITarget//继承
{
private:
IAdaptee* m_lpAdaptee;//组合
public:
Adapter(IAdaptee* lpAdaptee) :m_lpAdaptee(lpAdaptee)
{}
public:
virtual void Process()
{
int data = m_lpAdaptee->bar();
m_lpAdaptee->foo(data);
}
};
//类适配器
/*
ITarget继承是接口继承,指的是我符合或者说是遵循你的接口规范
IAdaptee继承是实现继承,我并没有继承你的接口,但是我用你的实现
*/
class Adapter :public ITarget, protected IAdaptee//多继承
{
};