- 当对象间存在一对多关系时,则使用观察者模式
- 当一个对象被修改时,则会自动通知依赖它的对象
- 在抽象类里有一个 ArrayList 存放观察者们
- JAVA 中已经有了对观察者模式的支持类。
- 避免循环引用。
- 如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式
package com.nike.erick.monitor;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Subject subject = new Subject();
new FirstObserver().register(subject);
new SecondObserver().register(subject);
subject.state = "号外号外,新到的小米";
subject.notifyAllObserver();
subject.state = "号外号外,小米已经卖光了";
subject.notifyAllObserver();
}
}
class Subject {
public List<Observer> observerList = new ArrayList<>();
public String state;
public void notifyAllObserver() {
for (Observer observer : observerList) {
observer.update(state);
}
}
}
abstract class Observer {
public abstract void update(String state);
public abstract void register(Subject subject);
}
class FirstObserver extends Observer {
@Override
public void update(String state) {
System.out.println("First Observer:" + state);
}
@Override
public void register(Subject subject) {
subject.observerList.add(this);
}
}
class SecondObserver extends Observer {
@Override
public void update(String state) {
System.out.println("Second Observer:" + state);
}
@Override
public void register(Subject subject) {
subject.observerList.add(this);
}
}