我有一个DownloadManager
管理多个DownloadItem
对象的类。每个DownloadItem
都有类似ProgressChanged
和的事件DownloadCompleted
。通常您希望对所有下载项使用相同的事件处理程序,因此必须为每个DownloadItem
.
因此,我需要决定使用哪种模式:
使用一个
DownloadItem
作为模板并根据需要克隆它var dm = DownloadManager(); var di = DownloadItem(); di.ProgressChanged += new DownloadProgressChangedEventHandler(di_ProgressChanged); di.DownloadCompleted += new DownloadProgressChangedEventHandler(di_DownloadCompleted); DownloadItem newDi; newDi = di.Clone(); newDi.Uri = "http://google.com"; dm.Enqueue(newDi); newDi = di.Clone(); newDi.Uri = "http://yahoo.com"; dm.Enqueue(newDi);
相反,设置事件处理程序
DownloadManager
并将事件复制到每个DownloadItem
被排队的事件。var dm = DownloadManager(); dm.ProgressChanged += new DownloadProgressChangedEventHandler(di_ProgressChanged); dm.DownloadCompleted += new DownloadProgressChangedEventHandler(di_DownloadCompleted); dm.Enqueue(new DownloadItem("http://google.com")); dm.Enqueue(new DownloadItem("http://yahoo.com"));
或者使用某种工厂
var dm = DownloadManager(); var dif = DownloadItemFactory(); dif.ProgressChanged += new DownloadProgressChangedEventHandler(di_ProgressChanged); dif.DownloadCompleted += new DownloadProgressChangedEventHandler(di_DownloadCompleted); dm.Enqueue(dif.Create("http://google.com")); dm.Enqueue(dif.Create("http://yahoo.com"));
你会推荐什么?