考虑到扩展性,可以定义一个抽象播放模式类,该抽象类中定义了一系列创建具体播放部件的方法。具体的三种播放模式继承于这个抽象播放模式类。 播放模式.h头文件代码如下:
#ifndef _PLAY_PATTERN_H_
#define _PLAY_PATTERN_H_
#include
#include
#include "Player.h" using namespace std; //抽象播放模式 class PlayPattern { protected: //具体产品(播放器) Player * m_pPlayer; public: PlayPattern() { m_pPlayer = new Player(); } ~PlayPattern() { if( NULL != m_pPlayer ) { delete m_pPlayer; m_pPlayer = NULL; } } //制造播放窗口 virtual void BuildWindow() = 0; //制造播放菜单 virtual void BuildMenu() = 0; //制造播放列表 virtual void BuildPlayList() = 0; //制造播放进度条 virtual void BuildControlBar() = 0; //制造收藏列表 virtual void BuildCollectList() = 0; //获取产品(播放器) Player * GetPlayer() { return m_pPlayer; } }; //完整播放模式 class FullPattern : public PlayPattern { public: void BuildWindow(); void BuildMenu(); void BuildPlayList(); void BuildControlBar(); void BuildCollectList(); }; //精简播放模式 class SimplePattern : public PlayPattern { public: void BuildWindow(); void BuildMenu(); void BuildPlayList(); void BuildControlBar(); void BuildCollectList(); }; //记忆播放模式 class MemoryPattern : public PlayPattern { public: void BuildWindow(); void BuildMenu(); void BuildPlayList(); void BuildControlBar(); void BuildCollectList(); }; #endif
播放模式Cpp文件代码如下:
#include "PlayPattern.h"
//制造播放窗口
void FullPattern::BuildWindow()
{
m_pPlayer->SetWindow("主界面窗口");
}
//制造播放菜单
void FullPattern::BuildMenu()
{
m_pPlayer->SetMenu("主菜单");
}
//制造播放列表
void FullPattern::BuildPlayList()
{
m_pPlayer->SetPlayList("播放列表");
}
//制造播放进度条
void FullPattern::BuildControlBar()
{
m_pPlayer->SetControlBar("进度条");
}
//制造收藏列表
void FullPattern::BuildCollectList()
{
m_pPlayer->SetCollectList(" ");
}
////////////////精简模式///////////////////////////////
void SimplePattern::BuildWindow()
{
m_pPlayer->SetWindow("主界面窗口");
}
void SimplePattern::BuildMenu()
{
m_pPlayer->SetMenu(" ");
}
void SimplePattern::BuildPlayList()
{
m_pPlayer->SetPlayList(" ");
}
void SimplePattern::BuildControlBar()
{
m_pPlayer->SetControlBar("进度条");
}
void SimplePattern::BuildCollectList()
{
m_pPlayer->SetCollectList(" ");
}
/////////////////记忆模式////////////////////////////////
void MemoryPattern::BuildWindow()
{
m_pPlayer->SetWindow("主界面窗口");
}
void MemoryPattern::BuildMenu()
{
m_pPlayer->SetMenu(" ");
}
void MemoryPattern::BuildPlayList()
{
m_pPlayer->SetPlayList(" ");
}
void MemoryPattern::BuildControlBar()
{
m_pPlayer->SetControlBar("进度条");
}
void MemoryPattern::BuildCollectList()
{
m_pPlayer->SetCollectList("收藏列表");
} 在建造者模式的结构中还引入了一个指挥者类Director,用于控制产品的创建过程。本例中ContructManage就是播放器指挥类。用户需要哪种类型的播放模式,只需要创建一个具体的播放模式,然后把这个播放模式传入到播放器指挥者中就可以了,由播放器指挥者处理一系列过程的建造。
暴风影音播放器指挥者类.h头文件实现如下:
#ifndef _CONTRUCT_MANAGE_H_
#define _CONTRUCT_MANAGE_H_
#include "PlayPattern.h"
#include "Player.h"
//建造管理器
class ContructManage
{
private:
//具体建造者
PlayPattern * m_pPlayPattern;
public:
//设置播放模式
void SetPlayPattern(PlayPattern * pPlayPattern);
//封装建造过程
Player * Construct();
};
#endif 暴风影音播放器指挥者类Cpp文件实现如下:
#include "ContructManage.h"
//设置播放模式
void ContructManage::SetPlayPattern(PlayPattern * pPlayPattern)
{
m_pPlayPattern = pPlayPattern;
}
//封装建造过程
Player * ContructManage::Construct()
{
m_pPlayPattern->BuildWindow();
m_pPlayPattern-