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

  • 相关阅读:
    从带Per-Building数据的KML/COLLADA中创建3D Tiles
    将Cesium Tools用于更好的构建管理
    使用Cesium Stories在3D Tilesets中检查Features
    使用Cesium Stories来可视化时序数据
    使用3D Tiles Overview学习3D Tiles
    使用EdgyGeo Cesium工具查询下载数据集
    探索新冠肺炎(COVID-19)对全球航班的影响
    [一]Cesium利其器——Visual Studio Code
    Cesium中文网的朋友们
    Gym 101908C
  • 原文地址:https://www.cnblogs.com/wildfish/p/148066.html
Copyright © 2011-2022 走看看