订阅者模式实例

通常我们做程序下载的时候可能会是一个比较缓慢的过程,为了让用户有一个良好的用户体验。我们不应该让用户看到的是类似程序死掉的界面,应该输出一些信息让用户能看到当前的操作进程
所以,我们使用了订阅者模式

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
这里只是提供一个注册观察者的方法
我们在我们长时间执行的操作中可以用如下方式:
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接口
#region Observer 成员

        
public void sendNotify(string message)
        
{
            MessageState.Text 
= message;
            
this.Refresh();
        }


        
#endregion
这个接口很简单,就是把接收到的消息显示在屏幕上

其实模式只是在重构和解决某种特定问题的时候才会使用到的,可能是比较潜意识的吧

其实不只是下载这种操作可以使用,比如EDI打包操作也可以使用,或者批量抽取数据到数据仓库。
可以使用的地方还是蛮多的,当然了,我们不能滥用模式,不能为了模式而模式,而是为了解决问题而模式
posted @ 2005-04-30 11:08  深渊野鱼  阅读(775)  评论(0编辑  收藏  举报