设计模式-适配器
适配器
AdaptorModle.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
//本软件 音乐播放器支持 3gp格式 不支持mp4 和 ts格式
//其他软件 播放器不能支持 3gp格式 支持mp4 和 ts格式
//新建一个适配器adaptor 继承 本软件 并且在音乐播放器中new对象执行适配器操作
//适配器 使用 其他软件抽象类,根据输入视频格式 new抽象类对应的子类 调用player方法
//适用于 已有程序适配, 不要用在新项目上,用的多了,会导致项目内容混乱
class OtherMediaPlayer
{
public:
OtherMediaPlayer(){}
OtherMediaPlayer(string str1, string str2){}
virtual void play() = 0;
};
class MP4MediaPlayer : public OtherMediaPlayer
{
public:
MP4MediaPlayer(string str_type, string str_name) {
this->type = str_type;
this->name = str_name;
}
virtual void play() {
cout << "本播放器兼容MP4播放器 开始播放 " << this->name << endl;
}
private:
string type;
string name;
};
class TSMediaPlayer : public OtherMediaPlayer
{
public:
TSMediaPlayer(string str_type, string str_name) {
this->type = str_type;
this->name = str_name;
}
virtual void play() {
cout << "本播放器兼容ts播放器 开始播放 " << this->name << endl;
}
private:
string type;
string name;
};
class MediaPlayer
{
public:
MediaPlayer() {}
~MediaPlayer() {}
virtual void play(string file_type, string file_name)=0;
private:
};
class AdaptorPlayer : public MediaPlayer
{
public:
AdaptorPlayer(string file_type, string file_name) {
if (file_type == "mp4")
OthPlayer = new MP4MediaPlayer(file_type, file_name);
if (file_type == "ts")
OthPlayer = new TSMediaPlayer(file_type, file_name);
}
virtual void play(string file_type, string file_name){
OthPlayer->play();
}
~AdaptorPlayer()
{
if (OthPlayer != NULL) delete OthPlayer;
OthPlayer = NULL;
}
private:
OtherMediaPlayer *OthPlayer;
};
class MusicPlayer : public MediaPlayer
{
public:
MusicPlayer() {}
~MusicPlayer() {
if (player != NULL) delete player;
player = NULL;
}
virtual void play(string file_type, string file_name) override {
if (file_type == "mp3") {
cout << "开始播放 " << file_name << endl;
}
else if (file_type == "mp4" || file_type == "ts") {
player = new AdaptorPlayer(file_type, file_name);
player->play(file_type,file_name);
}
else cout << "格式不支持!" << endl;
return;
}
private:
AdaptorPlayer *player;
};
main.cpp
int main(){
MediaPlayer *player = new MusicPlayer();
player->play("mp3", "一生有你.mp3");
player->play("mp4", "流浪地球.mp4");
player->play("ts", "直播户外.ts");
return 0;
}
输出结果
开始播放 一生有你.mp3
本播放器兼容MP4播放器 开始播放 流浪地球.mp4
本播放器兼容ts播放器 开始播放 直播户外.ts