定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主题Subject角色:
首先定义一个观察者数组,并实现增、删及通知操作。
它的职责很简单,就是定义谁能观察,谁不能观察
class Subject {
//观察者数组
private List<Observer> list = new ArrayList<>();
//增加一个观察者,相当于观察者注册
public void addObserver(Observer observer) {
this.list.add(observer);
}
//删除一个观察者
public void deleteObserver(Observer observer) {
this.list.remove(observer);
}
//通知所有观察者,主题有变化时通知观察者
public void notifyObserver() {
for(Observer observer : this.list) {
observer.response();
}
}
class ConcreteSubject extends Subject {
public void doSomething() {
System.out.println("具体目标发生改变...");
super.notifyObserver();
}
}
interface Observer {
public void response();
}
//具体观察者1
class ConcreteObserver1 implements Observer {
public void response() {
System.out.println("具体观察者1作出反应!");
}
}
//具体观察者1
class ConcreteObserver2 implements Observer {
public void response() {
System.out.println("具体观察者2作出反应!");
}
}
测试:
public static void main(String[] args) {
//创建一个主题
ConcreteSubject subject = new ConcreteSubject();
//定义一个观察者
Observer observer1 = new ConcreteObserver1();
Observer observer2 = new ConcreteObserver2();
//注册观察者
subject.addObserver(observer1);
subject.addObserver(observer2);
//开始活动
subject.doSomething();
}