mediaplayer构架研究之一

MVC模式
用于描述交互式系统
交互式系统要保证核心功能的稳定性和用户接口的变化


Model包含了核心功能和数据
Control处理用户输入
View向用户反馈信息
这个模型按我的理解有点简单。
就是
Input => Process => Ouput
Control => Model => View

变更-传播机制 保证了用户接口和模型间的一致

注意一下数据的流动,有点象MFC的文挡-视结构。
View从Model中得到变化了的数据
每当Model改变了数据就要通知所有相关的视图
而每个视图都有一个控制器用来接收用户输入,将其翻译成对Model的请求

每个部分都提供了什么?
Model封装数据,提供执行特定应用程序处理的功能,供给Control调用
Model也提供函数对可以让View获得它的数据




代码的作者说整体采用的是MVC构架,下面是作者一些描述:
Model - plugin(decoder)
View - VideoWidget & AudioWidget
Control - LoopControl



从实际代码来看
MediaPlayer和LoopControl这两个类实际上是Control模块
MediaPlayer对应的Model是AudioDevice和MediaState,提供了声音和其他控制的接口
有趣的是Mediaplayer定义的slot分为private 和public,有什么区别呢?<=可以被设定connnect的地点不同.
LoopControl提供了循环控制的用户接口
ControlWidgetBase类也是一个View但它的Control类或者Model却直接是MediaState类



整体上分:
MediaState

LoopControl
提供的接口有:
pause/mute:
控制播放的循环,内嵌一个声音播放线程
startaudio中做声音同步。



MVC的创建:
MediaPlayState创建了具体的audioUI/videoUI也就是具体的control类,
audioWidget/videoWidget都是继承于controlWidget。
这里是否有创建模型在里面?
audioUI/videoUI的需求是灵活的换肤。
在他们的基类中定义了核心的slot - setButtonData,此函数再调用setSkin
有点象类工厂的方法。setSkin就是类工厂的创建方法,通过传入一个参数具体指明如何去创建(创建的是audio还是video)

audioUI/videoUI都是在mediaState的构造函数中创建。此处值得考虑,由于在MVC中model与view是独立的。
而view与control是关联的,创建的方式是否与此有关?


回顾一下整个的创建过程:

主窗口的构造函数->createMeidaplayer->new MediaPlayerState->audioUI/videoUI

readConfig放在mediaPlayState构造函数中是否合适?应该放在创建类工厂里?



    

posted on 2004-07-12 17:13  embed  阅读(643)  评论(0编辑  收藏  举报

导航