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

  • 相关阅读:
    java内联函数
    jvm垃圾回收
    jvm内存管理
    java进程和线程的区别
    jvm
    简单易学的SSM(Spring+SpringMVC+MyBatis)整合
    Spring之声明式事务
    SpringMVC知识点小结
    Servlet之文件的上传与下载
    java使用字节流和字符流实现文件复制
  • 原文地址:https://www.cnblogs.com/wildfish/p/148066.html
Copyright © 2011-2022 走看看