两种适配器模式:类适配器模式和对象适配器模式
类适配器模式:
三个类:Target,Adapter,Adaptee。
因为现在没有画图工具,所以结构图就暂时不画了。(继承关系是:Adapter继承Target和Adaptee)。
其中Target是我们想要得到的接口,而Target中有些行为是没有的,但是Adaptee有,所以我们就可以通过适配来使用Adaptee,那么怎么才能获得Adaptee方法呢?继承和组合。
类适配器是采用继承的方法。
比如:鸟都有飞的功能,但是没有游的功能,但是鱼有游的功能。所以可以将鱼的功能适配给鸟。形成一种变种鸟。
#include<iostream>
using namespace std;
//Adaptee
class Fish
{
public:
void swim()
{
cout<<"I can swim"<<endl;
}
};
//Target
class Bird
{
public:
virtual void fly()//子类可以随意的改变此行为
{
cout<<"fly whith A"<<endl;
}
virtual void Specificswim()=0;//需要获取的行为
};
//Adapter
class VariantBird:public Bird,public Fish
{
public:
void fly()
{
cout<<"fly whith A"<<endl;
}
void Specificswim()
{
this->swim();
}
};
void main()
{
Bird* bird=new VariantBird();
bird->Specificswim();
}
对象适配器模式:采用组合的方式而不是继承。
#include<iostream>
using namespace std;
//Adaptee
class Fish
{
public:
void swim()
{
cout<<"I can swim"<<endl;
}
};
//Target
class Bird
{
public:
virtual void fly()//子类可以随意的改变此行为
{
cout<<"fly whith A"<<endl;
}
virtual void Specificswim()=0;//需要获取的行为
};
//Adapter
class VariantBird:public Bird
{
public:
VariantBird()
{
fish=new Fish();
}
~VariantBird()
{
if(fish)
{
delete fish;
fish=NULL;
}
}
void fly()
{
cout<<"fly whith A"<<endl;
}
void Specificswim()
{
fish->swim();
}
private:
Fish* fish;
};
void main()
{
Bird* bird=new VariantBird();
bird->Specificswim();
}