设计模式-适配器

适配器

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
posted @ 2023-02-07 16:51  Bell123  阅读(14)  评论(0编辑  收藏  举报