类适配器模式
类适配器是类间继承,只能通过覆写源角色的方法进行扩展;
// 目标
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 VlcPlayer : public IAdvacneMediaPlayer{
public:
virtual void playVlc(string fileName){
cout << "playing vlc file: " << fileName << endl;
}
virtual void playMp4(string fileName){
}
};
class Mp4Player : public IAdvacneMediaPlayer{
public:
virtual void playVlc(string fileName){
}
virtual void playMp4(string fileName){
cout << "playing mp4 file: " << fileName << endl;
}
};
// VLC 适配器
class VlcAudioMediaAdapter : public VlcPlayer, public IMediaPlayer{
public:
virtual void play(string fileName){
playVlc(fileName);
}
};
// MP4 适配器
class Mp4AudioMediaAdapter : public Mp4Player, public IMediaPlayer{
public:
virtual void play(string fileName){
playMp4(fileName);
}
};
int main(){
IMediaPlayer* media = new VlcAudioMediaAdapter();
media->play("/home/a.vlc");
media = new Mp4AudioMediaAdapter();
media->play("/home/b.mp4");
return 0;
}