如此功能组合大杂烩该用什么设计模式呢?
辉歌 2005-03-23 11:31:02 我正在用DirectShow做一个播放器。如何使用DirectShow做一个媒体播放器我已经知道了。基本思路就是通过CoCreateInstanc(CLSID_FilterGraph.....)得到一个 IGraphBuilder* 的接口指针,通过该指针,我们能得到其他的媒体控制功能接口指针。如:
m_pGraphBuilder->QueryInterface(IID_IMediaControl,(void**)&m_pMeidaControl));
得到了IMediaControl* m_pMediaControl接口指针。通过该接口,可以控制媒体的播放,停止,暂停等等:
m_pMediaControl->Run();
m_pMediaControl->Stop();
m_pMediaControl->Pause();
同样的,对于视频方面的控制,如全屏控制等,需要从IGraphBuilder* m_pGraphBuilder接口获得IVideoWindow接口。得到该接口后,用接口提供的函数控制全屏;对于音频方面的,同样从IGraphBuilder* m_pGraphBuilder接口获得一个接口,控制音频......
这些我都明白了。能做出一个媒体播放器来了。
但是我最近在学习设计模式,考虑到现在我使用的方法:
1,将各功能接口用一个类来封装起来,如:
class CVideoControl
{
private:
IVideoWindow* m_pVW;
public:
void SetFullScreen(BOOL b);
long GetFullScreen();
......
};
class CAudioControl
{
private:
IBasicAudio* m_pBA;
public:
void putVolume(long x);
void mute();
....
};
......
2,在CPlayer中,将这些类组合起来:
class CPlayer
{
private:
CVideoControl* m_pVC;
CAudioControl* m_pAC;
....
public:
void SetFullScreen(BOOL b);
long GetFullScreen();
void putVolume(long x);
void mute();
};
然后将各接口方法委托给各相关类去完成。
按照这个思路,现在的程序工作起来很正常。但是,这时候,组长要求我能添加一个新的功能,能得到当前播放的视音频信息,即播放速率等等之类的,一样,又需要将某个接口封装成一个类,将其加入到CPlayer中去。添加方法,委托给这个类。
我感觉这个很麻烦,是我的设计有问题了吧?所以想请大家帮帮忙,该应用那个设计模式比较合适这个现象?
同样的问题见:
http://community.csdn.net/Expert/topic/3843/3843495.xml?temp=.3564569
只是这些回答都牛头不对马嘴。