Subject:
各位老师,请看下列需求该如何设计?
[Print This Page]
Author:
sdshw
Time:
2011-1-17 14:12
Subject:
各位老师,请看下列需求该如何设计?
各位老师,请看下列需求该如何设计?
有个数据处理类 TDataProcess 负责分析处理数据,处理完成后要交给UI展示数据,
展示的UI要有多种风格
我本来是这样设计的:
IShowUI = interface //展示数据的接口 比如显示日志数据、显示图像数据等等
procedure ShowDataA;
procedure ShowDataB;
...
end;
TDataProcess = class
private
public
UI: IShowUI; //把数据展示做成接口
end;
TShowUI_1 = class(TForm, IShowUI)
//实现IShowUI接口
end;
TShowUI_2 = class(TForm, IShowUI)
//实现IShowUI接口
end;
这样设计,每个展示Form可视化的设计界面并各自去实现接口就可以了
但是,我对接口的了解不是很深刻,特别是关于生存期、释放之类的
所以,我想请问各位老师,如果不使用接口的话,满足该需求该如何设计呢
Author:
zzzl
Time:
2011-1-17 21:35
规则很简单,引用计数为0时就释放了。
你的设计并不坏啊,但从显示日志和显示图像这两个需求中抽象出接口好象有点困难? 另外,你的TDataProcess 和 IShowUI 好象是在一个线程里的,这样如果以后要把 TDataProcess 放到线程中,就要小心VCL同步的问题。
最简单的方法是让TDataProcess 给UI发消息,数据包就是消息参数。
Author:
Passion
Time:
2011-1-17 23:02
如果如楼上所说能抽象出共同的接口,那还是用接口优雅些。或者用抽象虚基类,但本质上和接口也是类似的,只不过Delphi不支持多重继承,所以还是接口方便。IDE的对外开放的OpenTools API都是通过接口实现的。
Author:
sdshw
Time:
2011-1-17 23:07
Subject:
回复 #2 zzzl 的帖子
多谢zzzl老师的耐心指导
针对我的问题,说白了我就是想让数据处理和展示分层,并且有多种展示风格
每个UI展示的数据是一样的(我理解为比如接口中有10个函数,就是展示10类数据)
另外,TDataProcess确实是工作在线程中的(使用了Indy的IdTcpServer,每个Client一个线程,大约200个Client)
线程中我已做过同步处理(Synchronize),但是感觉处理的相当别扭
因为Synchronize传递参数很不方便,必须为每类数据放一个成员变量
用发消息的方式确实是个好办法,但是UI在相应消息的时候,必须要清楚传递的数据结构,感觉稍微有点不爽 呵呵
Author:
sdshw
Time:
2011-1-17 23:13
Subject:
回复 #3 Passion 的帖子
LiuXiao老师,抽象虚基类您指的是带virtual; abstract;关键字的吗?
Author:
Passion
Time:
2011-1-18 18:53
对。不过Delphi低版本中没有纯的虚基类的说法,virtual abstract一般是指抽象虚方法。
应用起来就是这个意思。
Welcome to CnPack Forum (http://bbs.cnpack.org/)
Powered by Discuz! 5.0.0