所以,我们使用了订阅者模式
1。集中操作的类实现Subject接口
#region Subject 成员
/// <summary>
/// 注册订阅者
/// </summary>
/// <param name="obs">订阅者</param>
public void registerInterest(Observer obs)
{
observers.Add(obs);
}
/// <summary>
/// 发送给每个订阅者消息
/// </summary>
/// <param name="message">消息</param>
private void SendAllObserverMessage(string message)
{
for (int i = 0; i < observers.Count; i++)
{
Observer obs = (Observer) observers[i];
obs.sendNotify(message);
}
}
#endregion
/// <summary>
/// 注册订阅者
/// </summary>
/// <param name="obs">订阅者</param>
public void registerInterest(Observer obs)
{
observers.Add(obs);
}
/// <summary>
/// 发送给每个订阅者消息
/// </summary>
/// <param name="message">消息</param>
private void SendAllObserverMessage(string message)
{
for (int i = 0; i < observers.Count; i++)
{
Observer obs = (Observer) observers[i];
obs.sendNotify(message);
}
}
#endregion
我们在我们长时间执行的操作中可以用如下方式:
SendAllObserverMessage("正在下载更新包");
if (DownloadFile(stPath))
{
//get the root's parent directory
string parentPath = rootInfo.FullName;
destPath = parentPath + Path.DirectorySeparatorChar + stUpdateName + Path.DirectorySeparatorChar;
//Extract Zip File
SendAllObserverMessage("正在解压缩更新包到更新目录");
this.unzip(stPath, destPath);
//Delete Zip File
SendAllObserverMessage("正在删除更新包");
File.Delete(stPath);
}
if (DownloadFile(stPath))
{
//get the root's parent directory
string parentPath = rootInfo.FullName;
destPath = parentPath + Path.DirectorySeparatorChar + stUpdateName + Path.DirectorySeparatorChar;
//Extract Zip File
SendAllObserverMessage("正在解压缩更新包到更新目录");
this.unzip(stPath, destPath);
//Delete Zip File
SendAllObserverMessage("正在删除更新包");
File.Delete(stPath);
}
2。下载状态类实现Observer接口
#region Observer 成员
public void sendNotify(string message)
{
MessageState.Text = message;
this.Refresh();
}
#endregion
public void sendNotify(string message)
{
MessageState.Text = message;
this.Refresh();
}
#endregion
其实模式只是在重构和解决某种特定问题的时候才会使用到的,可能是比较潜意识的吧
其实不只是下载这种操作可以使用,比如EDI打包操作也可以使用,或者批量抽取数据到数据仓库。
可以使用的地方还是蛮多的,当然了,我们不能滥用模式,不能为了模式而模式,而是为了解决问题而模式