设计模式之观察者模式

观察者模式有由两部分组成:主题和观察者。主题负责生产数据,观察者通过订阅主题来获得需要观察的数据
观察者模式定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都收到通知并自动更新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//主题接口
public Interface Subject{
registerObserver(Observer);
removeObserver(Observer);
notifyObservers(); //有新数据的时候,调用该函数
}

//观察者接口
public Interface Observer{
//在主题有数据更新时,在notifyObservers函数里面,
//会对每一个已经注册的Observer调用该函数,实现对Observer的通知
void update();
}

//具体主题类
public class ASubject implements Subject{
public void registerObserver(Observer ob){...};
public void removeObserver(Observer ob){...};
public void notifyObservers(){ //有新数据的时候,调用该函数
for(Observer ob : Observers){
ob.update();
}
};
...
...
}

//具体的观察者类
public class AObserver implements Observer{
private Subject sbj; //对主题的应用,以实现对所感兴趣的主题的订阅与取消订阅
public void update(){...};
...
...
}

题外话

  1. “在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

  2. 在Java里面只有基本类型和按照下面这种定义方式的String是按值传递,其它的都是按引用传递。就是直接使用双引号定义的字符串方式:String str = “Java String”;