缺省适配器
定义: 为一个借口提供缺省实现,这样的类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展,当原接口中定义的方法太多,而其中大部分又不被需要时,这种非常有用;
// 目标
class IMediaPlayer{
public:
virtual void play(string fileName) = 0;
};
// 源
class IAdvacneMediaPlayer{
public:
virtual void playVlc(string fileName) = 0;
virtual void playMp4(string fileName) = 0;
};
// 缺省适配器
class CMediaPlayerAdapter : public IAdvacneMediaPlayer{
public:
virtual void playVlc(string fileName){
}
virtual void playMp4(string fileName){
}
};
class VlcPlayer : public CMediaPlayerAdapter{
public:
virtual void playVlc(string fileName){
cout << "playing vlc file: " << fileName << endl;
}
};
class Mp4Player : public CMediaPlayerAdapter{
public:
virtual void playMp4(string fileName){
cout << "playing mp4 file: " << fileName << endl;
}
};
// VLC 适配器
class VlcAudioMediaAdapter : public IMediaPlayer{
public:
VlcAudioMediaAdapter(VlcPlayer* player){
this->player = player;
}
virtual void play(string fileName){
player->playVlc(fileName);
}
private:
VlcPlayer* player;
};
// MP4 适配器
class Mp4AudioMediaAdapter : public IMediaPlayer{
public:
Mp4AudioMediaAdapter(Mp4Player* player){
this->player = player;
}
virtual void play(string fileName){
player->playMp4(fileName);
}
private:
Mp4Player* player;
};
int main(){
IMediaPlayer* media = new VlcAudioMediaAdapter(new VlcPlayer);
media->play("/home/a.vlc");
media = new Mp4AudioMediaAdapter(new Mp4Player);
media->play("/home/b.mp4");
return 0;
}