概念
正如字面意思,这是一种观察者的模式,被观察者(observable)做了某件事(调用方法||函数)后会立即通知观察者(observer),观察者知道后采取某些行动(调用方法||函数)。
目标
一般场景是,有多个观察者,去观察一个被观察者。
实现方式
1,首先,需要2个接口,一个被观察者接口,一个观察者接口,被观察者接口需要实现添加观察者(add),删除观察者(del),通知观察者(notify)方法,观察者接口需要实现更新(updata)方法。
2,其次,被观察者需要实现被观察接口,观察者需实现观察者接口;
3,最后,在应用场景(mian)中,实例化被观察者类,观察者类,并运行。

文件结构图:

代码:
observable接口:
public interface Observable{
public void addObservers(Observer ob);
public void delObservers(Observer ob);
public void notifyObservers(Object object);
}
Observable实现类:
//被观察者实例
public class ObservableInstance implements Observable {
private ArrayList<Observer> obList=new ArrayList<Observer>();
public void addObservers(Observer o) {
obList.add(o);
}
public void delObservers(Observer o) {
obList.remove(o);
}
public void notifyObservers(Object obj) {
for (Observer o : obList) {
o.update(obj);
}
}
public void dosomething() {
System.out.println("我要开始行动了!!");
this.notifyObservers("被观察者行动了");
}
}
Observer接口:
//观察者接口
public interface Observer {
public void update(Object ob);
}
Observer实现类:
//观察者1号
public class ObserverInstance1 implements Observer {
public void update(Object ob) {
System.out.println("观察者1观察到了————————"+ob.toString());
}
}
Observer实现类:
//观察者2号
public class ObserverInstance2 implements Observer {
public void update(Object ob) {
System.out.println("观察者2观察到了————————"+ob.toString());
}
}
应用场景类:
//应用场景类
public class main {
public static void main(String[] args) {
ObservableInstance observableInstance=new ObservableInstance();
ObserverInstance2 observerInstance2=new ObserverInstance2();
ObserverInstance1 observerInstance1=new ObserverInstance1();
observableInstance.addObservers(observerInstance2);
observableInstance.addObservers(observerInstance1);
observableInstance.dosomething();
}
}
扩展
java中有java.util.Observable
实现类和java.util.Observer
实现类,这两个类已经将被观察者的三个接口和观察者的一个接口实现了,继承这两个类便可实现观察者模式,继承Observable的类不需要去实现添加,删除,通知接口,方便实现。
网友评论