观察者模式,定义对象之间的一对多依赖关系,当被观察者的状态发生改变的时候,所有观察者得到通知并且自动更新。
这里有几个地方是这个模式需要了解的:
在被观察者类中添加观察者的时候,这里用了Java vector集合,而不是用list,这是因为在多线程的环境下,vector是线程安全的,而list不是线程安全的。再用泛型把观察者绑定到这个集合中。
被观察者类中还需要几个方法,例如添加、删除观察者,还有一个通知观察者自动更新的方法,这个方法比较重要,主要是对vector集合内的观察者迭代,并通知更新。所以,每个观察者都需要有一个update()的更新方法。
观察者对象往往都是通过接口实现的,接口仅需要一个update更新方法。
java代码如下图所示:
import java.util.Vector;
public class ObserverModel {
abstract static class Object{//被观察者对象
private Vector<Observer> observer = new Vector<Observer>();
public void addObserver(Observer o){
this.observer.add(o);
}
public void delObserver(){
}
public void notifyObserver(){
for(Observer o : observer){
o.update();
}
}
public void dosomething(){}
}
public static class oncreateObject extends Object{
public void dosomething() {
System.out.println("被观察者被创建!");
this.notifyObserver();
}
}
static interface Observer{
public void update();
}
public static class oncreateObserver1 implements Observer{
@Override
public void update() {
System.out.println("观察者1对象被创建,得到通知并且自动更新!");
}
}
public static class oncreateObserver2 implements Observer{
@Override
public void update() {
System.out.println("观察者2对象被创建,得到通知并且自动更新!");
}
}
public static void main(String[] args) {
Object obj = new oncreateObject();
Observer obs1 = new oncreateObserver1();
obj.addObserver(obs1);
Observer obs2 = new oncreateObserver2();
obj.addObserver(obs2);
obj.dosomething();
}
}


被折叠的 条评论
为什么被折叠?



