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

  • 相关阅读:
    为结构体中函数指针赋值的两种方法(转)
    (obj) error: LNK2019: 无法解析的外部符号解决方法
    js cookie存储方法
    js关于对象键值为数字型时输出的对象自动排序问题的解决方法
    HTML5 LocalStorage 本地存储的用法
    onhashchange事件,只需要修改hash值即可响应onhashchange事件中的函数(适用于上一题下一题和跳转页面等功能)
    js实现页面a向页面b传参的方法
    前端比较好的学习资料(包括js和css)以及 最全前端资源汇集
    字符串js编码转换成实体html编码的方法(防范XSS攻击)
    fis3使用环境
  • 原文地址:https://www.cnblogs.com/wildfish/p/148066.html
Copyright © 2011-2022 走看看