zoukankan      html  css  js  c++  java
  • 观察者模式和海量数据处理

    观察者模式

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

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

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

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

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

     

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

     

     

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

    <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份,

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

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

             

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

    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    Asp.net button防止点击多次数据提交
    Asp.net button防止点击多次数据提交
    Asp.net button防止点击多次数据提交
    被投资人坑的大学生创业者
    分析了3200家创业公司
    移动互联网4种引流思维:免费思维、跨界思维、平台思维、金融思维
    腾讯入局、估值超10亿美元,“野路子”瑞幸的三大增长法则
    95后女生月入8万,竟然“玩着玩着”就赚到钱
    95后中介年入百万:“伪焦虑”是你人生最大的骗局
    一家靠收智商税盈利的公司,卖了340亿
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/8468882.html
Copyright © 2011-2022 走看看