两个接口,一个主题接口(一般包含了注册观察者,删除观察者,发布三个方法),一个观察者接口(一般只要有一个update,但发布消息时给主题调用).
1.观察者接口
public interface MyObserver {
public void update(String name);
}
2.主题发布者接口
public interface MySubject {
public void addObserver(MyObserver o);
public void removeObserver(MyObserver o);
public void notifyAllObserver();
}
3.观察者实现
public class MyObserver1 implements MyObserver{
private MySubject subject;
public MyObserver1(MySubject subject){
this.subject=subject;
this.subject.addObserver(this);
}
public void update(String name) {
// TODO Auto-generated method stub
System.out.println("订阅者"+this+"收到"+name);
}
}
4.主题发布者实现
public class MySubjectImpl implements MySubject {
private ArrayList observers;
public MySubjectImpl(){
observers=new ArrayList();
}
public void addObserver(MyObserver o) {
// TODO Auto-generated method stub
observers.add(o);
}
public void removeObserver(MyObserver o) {
// TODO Auto-generated method stub
int i = observers.indexOf(o);
if(i>0){
observers.remove(i);
}
}
public void notifyAllObserver() {
// TODO Auto-generated method stub
for(int i= 0;i<observers.size();i++){
MyObserver observer = (MyObserver)observers.get(i);
observer.update("发布者"+this+"发布的消息");
}
}
}
5.整合测试,兄弟
public class ObserverSubject {
public static void main(String[] args) {
MySubjectImpl subject=new MySubjectImpl();
MyObserver1 observer=new MyObserver1(subject);
MyObserver1 observer1=new MyObserver1(subject);
subject.notifyAllObserver();
}
}
结果应该是这样的,他们都收到了消息.