zoukankan      html  css  js  c++  java
  • 订阅者模式实例

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

    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打包操作也可以使用,或者批量抽取数据到数据仓库。
    可以使用的地方还是蛮多的,当然了,我们不能滥用模式,不能为了模式而模式,而是为了解决问题而模式

  • 相关阅读:
    python pop()
    二年为限,看到自己的改变
    Android layout布局属性、标签属性总结大全
    js判断PC端和移动端
    JS简易模拟滚动条
    (响应式PC端媒体查询)电脑屏幕分辨率尺寸大全
    手机尺寸和平板电脑的屏幕分辨率
    【整理笔记】手机端html页面制作需要了解的东西集合
    JS获取浏览器版本号及获取IE版本提示并关闭
    CSS DIV垂直居中
  • 原文地址:https://www.cnblogs.com/wildfish/p/148066.html
Copyright © 2011-2022 走看看