码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-25 13:07:26      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:问题:   bsp   订阅   center   ping   height   obs   min   rem   

观察者模式

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

                  假设用户界面是观察者,业务数据是被观察者,当数据变化时会通知界面,界面会做出相应的修改和变化。

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

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

 

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

 

 

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

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

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

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

         

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

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

标签:问题:   bsp   订阅   center   ping   height   obs   min   rem   

原文地址:https://www.cnblogs.com/shijinglu2018/p/8468882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!