订阅者模式实例 通常我们做程序下载的时候可能会是一个比较缓慢的过程,为了让用户有一个良好的用户体验。我们不应该让用户看到的是类似程序死掉的界面,应该输出一些信息让用户能看到当前的操作进程 所以,我们使用了订阅者模式 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打包操作也可以使用,或者批量抽取数据到数据仓库。 可以使用的地方还是蛮多的,当然了,我们不能滥用模式,不能为了模式而模式,而是为了解决问题而模式