将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
共有两类适配器模式:
对象适配器模式
-- 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。
一个简单的对象适配器模式实例:
#include<iostream>
using namespace std;
class Target//客户期望的接口
{
public:
virtual void show(){cout<<"Targer show..."<<endl;}
};
class Adaptee//需要适配的接口
{
public:
void fastshow(){cout<<"fastshow..."<<endl;}
};
class Adapter:public Target//适配器
{
private:
Adaptee A;
public:
void show(){A.fastshow();}
};
int main(void)
{
Target *p = new Adapter();
p->show();
return 0;
}
如果有多个适配对象时, 可使用模板解决!
#include<iostream>
using namespace std;
class Target//客户期望的接口
{
public:
virtual void show(){cout<<"Targer show..."<<endl;}
};
class zhangsan//需要适配的接口
{
public:
void fastshow(){cout<<"zhangsan fastshow..."<<endl;}
};
class lisi//需要适配的接口
{
public:
void fastshow(){cout<<"lisi fastshow..."<<endl;}
};
class wangwu//需要适配的接口
{
public:
void fastshow(){cout<<"wangwu fastshow..."<<endl;}
};
template<typename T>class Adapter:public Target//适配器
{
private:
T A;
public:
void show(){A.fastshow();}
};
int main(void)
{
Target *p = new Adapter<zhangsan>();
p->show();
return 0;
}
类适配器模式
-- 这种适配器模式下,
适配器继承自已实现的类(一般用多重继承实现)
。
#include<iostream>
using namespace std;
class Target//客户期望的接口
{
public:
virtual void show(){cout<<"Targer show..."<<endl;}
};
class Adaptee//需要适配的接口
{
public:
void fastshow(){cout<<"fastshow..."<<endl;}
};
class Adapter:public Target,public Adaptee//适配器
{
public:
void show(){Adaptee::fastshow();}
};
int main(void)
{
Target *p = new Adapter();
p->show();
return 0;
}