观察者模式主要就是建立在观察者和被观察者之间,
观察者: 抽象观察者和它的具体实现
被观察者或者称之为主题:抽象主题和它的具体实现
代码如下:
package com.zcj.observerpattern;
public interface Observer {
public void update();
}
public class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
super();
this.name = name;
}
@Override
public void update() {
System.out.println("观察者"+name+":被执行了。。。!");
}
}
package com.zcj.observerpattern;
public interface Subject {
public void addObserver(Observer obs);
public void removeObserver(Observer obs);
public void notifyObserver();
}
package com.zcj.observerpattern;
import java.util.ArrayList;
import java.util.List;
public class ConcreteSubject implements Subject {
private List<Observer> list = new ArrayList<Observer>();
public List<Observer> getList() {
return list;
}
public void setList(List<Observer> list) {
this.list = list;
}
@Override
public void addObserver(Observer obs) {
list.add(obs);
}
@Override
public void notifyObserver() {
for(Observer obs:list){
obs.update();
}
}
@Override
public void removeObserver(Observer obs) {
list.remove(obs);
}
}
最终的测试类:
package com.zcj.observerpattern;
public class ObserverTest {
public static void main(String[] args) {
Subject subject = new ConcreteSubject();
Observer observer1 = new ConcreteObserver("A");
Observer observer2 = new ConcreteObserver("B");
Observer observer3 = new ConcreteObserver("C");
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.addObserver(observer3);
subject.notifyObserver();
}
}
测试结果如下:
观察者A:被执行了。。。!
观察者B:被执行了。。。!
观察者C:被执行了。。。!
百度百科里面给出的javaDemo里面使用的是反射的机制来调用观察者的方法