将抽象部分与它的实现部分分离,使它们都可以独立地变化。
#include <iostream>
using namespace std;
// video抽象类
class Video
{
public:
virtual void play_video() = 0;
};
// mpeg
class MPEG : public Video
{
public:
void play_video()
{
cout << "播放mpeg视频" << endl;
}
};
// avi
class AVI : public Video
{
public:
void play_video()
{
cout << "播放avi视频" << endl;
}
};
// rmvb
class RMVB : public Video
{
public:
void play_video()
{
cout << "播放rmvb视频" << endl;
}
};
// os抽象类
class OS
{
public:
OS(Video* video) : pVideo(video) {}
~OS()
{
if (pVideo)
{
delete pVideo;
}
}
virtual void play() = 0;
protected:
Video* pVideo;
};
// windows
class Windows : public OS
{
public:
Windows(Video* video) : OS(video) {}
void play()
{
cout << "Windows下: " << endl;
pVideo->play_video();
}
};
// linux
class Linux : public OS
{
public:
Linux(Video* video) : OS(video) {}
void play()
{
cout << "Linux下: " << endl;
pVideo->play_video();
}
};
void test_01()
{
Video* video = new MPEG;
OS* os = new Windows(video);
os->play();
delete os;
delete video;
}
int main()
{
test_01();
system("pause");
return 0;
}