适配器模式:将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
现有如下情况:
int main(){
vector<int> v;
for(int i = 0 ; i < 10; i ++){
v.push_back(i);
}
//第三个参数为一个函数,观察for_each的源代码可以得知该函数仅可接受一个参数
for_each(v.begin(), v.end(), ??? );
}
需要的目标函数,该函数需要传入两个参数。
struct MyPrint{
void operator()(int v1, int v2){
cout << v1+v2 <<endl;
}
};
我们希望传入的函数接收两个参数,这不符合规定,所以需要适配器!
定义目标接口,适配器需要适配成什么样子,由for_each可知,该函数仅可接受一个参数
class Target{
public:
virtual void operator()(int v) = 0;
};
写适配器,该适配器继承了目标接口,并实现目标函数的作用
class Adapter : public Target{
public:
virtual void operator()(int v){
print(v, 100);
}
public:
MyPrint print; //一个成员变量,该成员变量类型为我们所要实现的函数的类
};
此时,for_each的调用如下所示
for_each(v.begin(), v.end(), Adapter());
//运行结果
100
101
102
103
104
105
106
107
108
109