观察者模式
观察者模式
- 在软件构建过程中,我们需要为某些对象建立一种”通知依赖关系”,即一个对象(目标对象)的状态发生改变,所有依赖对象(观察者对象)都将得到通知.观察者模式定义了对象之间一对多的依赖,当一个对象状态发生改变时,它的依赖者都会收到通知并自动更新相关内容.
观察者模式要点总结
- 使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者,从而使二者之间的依赖关系达到松耦合
- 目标发送通知时,无需指定观察者,通知(可以携带通知信息所为参数)会自动传播
- 观察者自己决定是否需要订阅通知,目标对象对此一无所知
代码例子
- 以报社问题为原型,来描述一个观察者的应用场景
1
2
3
4//观察者接口
public interface IObserver {
void update(String msg);
}1
2
3
4
5
6
7//主题接口
public interface ISubject {
void registerObserver(IObserver observer);
void removeObserver(IObserver observer);
void notifyObserver();
}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//报社主题
public class NewPaperOffice implement ISubject {
private int time = 1;
private List<IObserver> mList = new ArrayList();
public void registerObserver(IObserve observer){
if(observer != null)
mList.add(observer);
}
public void removeObserver(IObserver obsrever){
mList.remove(observer);
}
public void notifyObserver(){
for(int i=0;i<mList;i++){
String msg = "通知观察者"
mList.get(i).update(msg);
}
}
}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//观察者实现
public class FirstObserver implement IObserver{
private String message;
public String getMsg(){
return msg;
}
public void update(String msg){
message = "FirstObserver 收到了" + msg;
}
}
public class SecondObserver implements IObserver {//观察者实现
private String message;
public String getMessage() {
return message;
}
public void update(String msg) {
message = "SecondObserver 收到了" + msg;
}
}