观察者模式的简单示例

使用观察者模式用到 java.util 的两个类或接口,Observer 和 Observable。

角色:观察者和被观察者。

观察者需要实现 Observer 接口,该接口只有一个 update 方法,第一个参数表示的被观察者对象,第二个参数表示的是 Observable 的 notifyObserver 的参数(具体里面怎么实现的也不是很清楚)。

被观察者需要继承 Observable,当你要调用到某个方法需要让观察者观察到时,在方法中调用 Observable 的 setChange() 和 notifyObserver() 方法就行了。

贴上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 被观察者:
public class Subject extends Observable {
public void doSomething() {
System.out.println("doSomething");
super.setChanged();
super.notifyObservers("aaa");
}
}

// 观察者:
public class MyObserver implements Observer {
public void update(Observable observable, Object obj) {
System.out.println("观察到了");
System.out.println(obj);
}
}

// 测试:
public static void main(String[] args) {
Subject s = new Subject();
s.addObserver(new MyObserver());
s.doSomething();
}

Spring 对观察者模式也做了包装,在配置文件中配置观察者和被观察者就行了,不用在被观察者中代码添加观察者: