D
dropme
Unregistered / Unconfirmed
GUEST, unregistred user!
正在学习模式设计,属于超级菜鸟那种。。。大家表笑哈
用indyFtp做一个Ftp的下载客户端,设计成酱子
FTPEngine
|
|继承
|
IndyFTPEngine-----ThreadIndyFTPEngine
包含
FTPEngine是一个接口基类,抽象纯虚的,定义了DownLoad,UpLoad等方法
IndyFTPEngine继承自接口,本来这样就可以,但是一般都是把IndyFTP放到线程里面用的,这样界面不会freeze,所以有了ThreadIndyFTPEngine。
这样设计的话,上层只要用FTPEngine就可以,假如以后要换用ICS,或者从Indy9换到Indy10,上层都不用改,只要重写个ICSFTPEngine/Indy10FTPEngine和TreadICSFTPEngine/Indy10FTPEngine,基本做到代码重用(希望是酱子)
1.请教下这样设计是否合理,如果不合理的话应该怎样?或者说常用的做法是怎样的?
2.这种设计遇到个困难,就是状态反馈,假如说我要在界面上显示下载的即时速度,那么一般是在IndyFTP的OnWork事件里统计,这样设计后,要怎么才能反馈给主界面呢?
示例代码:
TFTPEngine = class
public
procedure UpLoad(AFileName: String);virtual;abstract;
proceduredo
wnLoad(AFileName: String);virtual;abstract;
end;
TThreadIndyFtpEngine = class(TThread)
protected
procedure Execute;
public
procedure Create(AFileName: String;Operation: Integer);
//AFileName: 文件名
//Operation: 要执行的操作
end;
TIndyFTPEngine = class(TFTPEngine)
private
FEngine: TThreadIndyFtp;
public
procedure UpLoad(AFileName: String);override;
proceduredo
wnLoad(AFileName: String);override;
end;
只剩这点分了,8好意思的说~
用indyFtp做一个Ftp的下载客户端,设计成酱子
FTPEngine
|
|继承
|
IndyFTPEngine-----ThreadIndyFTPEngine
包含
FTPEngine是一个接口基类,抽象纯虚的,定义了DownLoad,UpLoad等方法
IndyFTPEngine继承自接口,本来这样就可以,但是一般都是把IndyFTP放到线程里面用的,这样界面不会freeze,所以有了ThreadIndyFTPEngine。
这样设计的话,上层只要用FTPEngine就可以,假如以后要换用ICS,或者从Indy9换到Indy10,上层都不用改,只要重写个ICSFTPEngine/Indy10FTPEngine和TreadICSFTPEngine/Indy10FTPEngine,基本做到代码重用(希望是酱子)
1.请教下这样设计是否合理,如果不合理的话应该怎样?或者说常用的做法是怎样的?
2.这种设计遇到个困难,就是状态反馈,假如说我要在界面上显示下载的即时速度,那么一般是在IndyFTP的OnWork事件里统计,这样设计后,要怎么才能反馈给主界面呢?
示例代码:
TFTPEngine = class
public
procedure UpLoad(AFileName: String);virtual;abstract;
proceduredo
wnLoad(AFileName: String);virtual;abstract;
end;
TThreadIndyFtpEngine = class(TThread)
protected
procedure Execute;
public
procedure Create(AFileName: String;Operation: Integer);
//AFileName: 文件名
//Operation: 要执行的操作
end;
TIndyFTPEngine = class(TFTPEngine)
private
FEngine: TThreadIndyFtp;
public
procedure UpLoad(AFileName: String);override;
proceduredo
wnLoad(AFileName: String);override;
end;
只剩这点分了,8好意思的说~