主要是通过适配器来适配第三方接口。
图中右边两个关系分别代表以下两种实现。
//继承实现,也称类模式
class Target
{
public:
Target(){}
virtual ~Target(){}
virtual void Request(){cout<<"Target::request"<<endl;}
};
class Adaptee
{
public:
Adaptee(){}
virtual ~Adaptee(){}
virtual void SpeicalRequest(){cout<<"Adaptee::specialrequest"<<endl;}
};
class Adapter : public Target,private Adaptee
{
public:
Adapter(){}
~Adapter(){}
void Request(){this->SpeicalRequest();}
};
int _tmain(int argc, _TCHAR* argv[])
{
Target* ad = new Adapter;
ad->Request();
system("pause");
return 0;
}
//组合实现,对象模式
class Target
{
public:
Target(){}
virtual ~Target(){}
virtual void Request(){cout<<"Target::request"<<endl;}
};
class Adaptee
{
public:
Adaptee(){}
virtual ~Adaptee(){}
virtual void SpeicalRequest(){cout<<"Adaptee::specialrequest"<<endl;}
};
class Adapter : public Target
{
public:
Adapter(Adaptee* _ade){m_adaptee = _ade;}
~Adapter(){}
void Request(){m_adaptee->SpeicalRequest();}
private:
Adaptee* m_adaptee;
};
int _tmain(int argc, _TCHAR* argv[])
{
Adaptee* ade = new Adaptee;
Target* ad = new Adapter(ade);
ad->Request();
system("pause");
return 0;
}
这里说一下接口继承和实现继承。
接口继承也就是子类获得父类的接口,父类没有实现部分,而实现继承则是继承父类的实现。Public继承既是接口实现又是继承实现,而private继承则是实现继承。
纯虚函数:要求继承类必须含有某个接口,并对接口函数实现(C++可以提供纯虚函数的默认实现,所以不是正宗的接口继承)。
虚函数:继承类必须含有某个接口,可以自己实现,也可以不实现,而采用基类定义的缺省实现。
非虚函数:继承类必须含有某个接口,必须使用基类的实现。