• 观察者模式和海量数据处理


    观察者模式

    观察者模式:也叫订阅模式或发布模式,使得对象间相互对话。

                      假设用户界面是观察者,业务数据是被观察者,当数据变化时会通知界面,

                      界面会做出相应的修改和变化。

    作用:提供了组件之间紧密联系地一种方式,将观察者与被观察的对象分开。

    具体实现:一个对象添加一个方法(允许观察者注册自己),使得本身变得可以观察。

     

    //问题:观察者收到消息后所执行的操作与观察的对象无关?

     

     

    比如实现天气预报的主要功能,同样的天气预报有不同的显示方式。

    <interface>                                <interface>

    Subject                                       Observer

    ———————                             ———————

    +addObserver()     ————>         +update()

    +removeObserver()                              |

    +notifyObservers()                               |

            |                                                | 

            |                                              

            |                                        ConcretSubject

       ConcretSubject

    实现增删观察者,通知观察者对象        实际观察者

     

    思路:

    import java.util.ArrayList;
    
    interface Subject{
    
    public void registerObserver(Observer o);
    
    public void removeObserver(Observer o);
    
    public void notifyObserver();
    
    }
    
     
    
    class Whether implements Subject{
    
    private ArrayList<Observer>observers=new ArrayList<Observer>();
    
    private float temperature;
    
    @verride
    
    ...
    
    @verride
    
    ...
    
    @verride
    
    ...
     
    
    //重写Subject中的三个方法
    
    
    //更改、设置、并通知观察者对象
    
    }
    
     
    
    interface Observer{
    
    public void update(float temp);
    
    }
     
    
    class WhetherDisplay1 implements Observer{
    
    …
    
    //参数传递进来并修改
    
    @verride
    
    ...
    
    //重写update方法并打印显示
    
    }
    
     
    
    class WhetherDisplay2 implements Observer{
    
    private float temperature;
    
    public WhetherDisplay2(Subject whether){
    
    whether.registerObserver(this);
    
    @verride
    
    ...
    
    //重写update方法并打印显示
    
    }
    
    
    public class Test{
    
    public static void main(String[] args) {
    
     Whether whether=new Whether();
    
     WhetherDisplay1 d1=new WhetherDisplay1();
    
     WhetherDisplay2 d2=new WhetherDisplay2();
    
        whether.setTemperature(27);
    
        whether.setTemperature(26);
    
        }
    }

     

    海量数据处理

    题目:有一个10亿条记录的文本文件,已按照关键字拍好序存储,请设计一个算法,

             可以从文件中快速查找指定的记录。

             答:10亿条记录的数据量较大,无法一次读入内存,所以要把它分成100份,

    把第一条记录关键字和此记录对应的文件偏移量先扫入内存,定位出指定关键字的

    记录块,把相应的记录块拿到内存,用二分法即可。

             

            //文件偏移量:指从指定位置向前或向后移动的字节数,偏移量是用来从文件中找到所用数据时用的。 

    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    自己的理想,成长过程逐渐明确
    泯灭众人咱不怕。本身就是一个凡人。重要的是,做一个认真的平凡人。
    Access开端
    JsonHelper使用方式
    安装Office Visio 2007 中文版提示找不到安装源
    今天记
    BINGMAPS GPS经纬度格式转换。
    access 基础知识
    (井底之蛙)惭愧丢人的两段代码希望以后多多长进,警醒自己
    脱离SVN版本控制。DAT文件语句。
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/8468882.html
Copyright © 2020-2023  润新知