通常我們做程式下載的時候可能會是一個比較緩慢的過程,為了讓使用者有一個良好的使用者體驗。我們不應該讓使用者看到的是類似程式死掉的介面,應該輸出一些資訊讓使用者能看到當前的操作進程
所以,我們使用了訂閱者模式
1。集中操作的類實現Subject介面
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
這裡只是提供一個註冊觀察者的方法
我們在我們長時間執行的操作中可以用如下方式:
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);
}
2。下載狀態類實現Observer介面
Observer 成員#region Observer 成員
public void sendNotify(string message)
{
MessageState.Text = message;
this.Refresh();
}
#endregion
這個介面很簡單,就是把接收到的訊息顯示在螢幕上
其實模式只是在重構和解決某種特定問題的時候才會使用到的,可能是比較潛意識的吧
其實不只是下載這種操作可以使用,比如EDI打包操作也可以使用,或者批量抽取資料到資料倉儲。
可以使用的地方還是蠻多的,當然了,我們不能濫用模式,不能為了模式而模式,而是為瞭解決問題而模式