如何根据下面的描述,科学的设计类,以达到复用的目的 ( 积分: 150 )

  • 主题发起人 mycwcgr_new
  • 开始时间
M

mycwcgr_new

Unregistered / Unconfirmed
GUEST, unregistred user!
如何根据下面的描述,科学的设计类,以达到复用的目的

我想设计一个程序,它既可以显示存贮在数据库中的图片内容和电影内容,又可以显示磁盘中的图片文件和电影文件的内容!
并且图片信息要求能显示,放大、缩小、旋转等;电影能播放、暂停、快进、快退等!

相似点:
1、在数据库中,图片数据和电影数据的存贮格式相同,都使用二进制格式保存数据(假定数据库中表的结构如下:ID,Content,ExtractFileName),
可以使用ExtractFileName(文件名的后缀)字段来判断Content(二进制)保存的是图片数据还是电影数据!它们有许多相同的方法,如增加,删除、编辑等
2、数据库中的图片数据和磁盘中的图片文件都有许多相同的方法,如显示,放大、缩小、旋转等
3、数据库中的电影数据和磁盘中的电影文件都有许多相同的方法,如播放、暂停、快进、快退等

请问这四个类究竟是一个什么关系?它们之间的继承关系如何,它们是否有其同的基类,如何设计它们,使之操作方便
 
如何根据下面的描述,科学的设计类,以达到复用的目的

我想设计一个程序,它既可以显示存贮在数据库中的图片内容和电影内容,又可以显示磁盘中的图片文件和电影文件的内容!
并且图片信息要求能显示,放大、缩小、旋转等;电影能播放、暂停、快进、快退等!

相似点:
1、在数据库中,图片数据和电影数据的存贮格式相同,都使用二进制格式保存数据(假定数据库中表的结构如下:ID,Content,ExtractFileName),
可以使用ExtractFileName(文件名的后缀)字段来判断Content(二进制)保存的是图片数据还是电影数据!它们有许多相同的方法,如增加,删除、编辑等
2、数据库中的图片数据和磁盘中的图片文件都有许多相同的方法,如显示,放大、缩小、旋转等
3、数据库中的电影数据和磁盘中的电影文件都有许多相同的方法,如播放、暂停、快进、快退等

请问这四个类究竟是一个什么关系?它们之间的继承关系如何,它们是否有其同的基类,如何设计它们,使之操作方便
 
不会吧!
把电影存放在数据库中?
为什么要这样?
 
刘艺的桥接模式(Bridge)就是举了这个例子
到他的站点下载框架代码,第10章
 
张鸿林,
Please tell me details, Thanks!
 
http://www.liu-yi.net/BBS/dispbbs.asp?boardID=50&ID=246&page=1
 
建议图片对象单独一个类,影片单独一个类。把增加,删除等共同操作放在一个接口中,然后在图片类和影片类实现
 
我不关心您放入数据库的数据是蚂蚁还是地球,就您的问问题的思路方面,我想说如下
几点:
1.Delphi中最原始的基类叫 TObject,按这个说法,任何现在看起来五花八门
  的类,都有共同的基类,假如您希望把功能封装在某个类里,是不必讨论“共同的
  基类”的问题的。
2.电影、图片按数据形式来讲,确实都不过是二进制数据,但用于解释和呈现的手段
  却是完全不同的,至于缩放等效果,是呈现处理时的操作,与具体存放在数据库里
  的数据无关,这点您是知道的,但由于技术上的局限,大多数时间,我们会利用现
  成的解释处理,比如MPAG解码等,如果解释处理需要读入文件来处理,我们也就只
  能先把数据库中的二进制数据先保存为文件,再利用现成的解码器来处理。
3.由上可知,除非您的团队能力精强,方方面面都有强人,一般很难做到只用四个类
  来完成全部的工作,更不要说统筹好一个始祖基类一步一步往下写了,就是一个呈
  现接口要同时满足图片处理和帧框架处理,在著名的品尼高产品中都是不多见的,
  其中或许还违反了一些类的设计原则(本来应该没有所谓的原则一说,只是现在的教
  条书都这么教人,有些人还以严格遵循为荣,所以我也就这么用一下“原则”这个词)
我这个回答不会令楼主您满意,但我实在找不到更好的回答了,相信您会明白我是认真的说。
 
同志们:
偏题了!!!
我仅仅是说在数据库中保存不同类型的数据,它们的存贮格式相同,都是二进制的,而且给出了一个字段 ExtractFileName 用于区分,这些类型的数据可以是图片、电影,也可以是Word文档或其它信息,并且这些信息可能存贮在数据库中也可能在磁盘上以文件的形式存在。不同的信息的操作方法各不相同(图片可以放大缩小,Word文档可以显示和打印,上面我所说的仅仅是例子)。 我仅仅是想要更好的组织这些类,使之可以很好的复用的扩充和编程方便。
 
将操作同具体的实现代码分离.(以下代码只为示意)
定义基类,它完成全部交互操作的抽象,例如显示,存盘,单击,双击,拖动,打印等(交互操作是有限的);
继承基类,并完成具体类的特列方法,
例如:图片类,可以实现显示(支持放缩比例),打印等。并结合交互操作重写实现。
例如:双击操作实现:
procedure T图片.DblClick(Sender: TObject);
begin
显示(100);
// 原始大小
end;
类似可以通过鼠标操作实现图片的放缩或电影快进或快退等操作。
具体组织方式可以这样:
定义全局基类的变量;根据文档类型创建具体的类。
在界面中,将交互操作同基类的抽象操作方法绑定即可。
扩展方法:只要继承基类,实现个体的特殊方法即可,界面相关的代码一行不用改。
 
用接口不就搞定了吗?
用接口不就搞定了吗?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部