public interface Observer {
/**
* 观察者更新方法
* 拉模式:传入整个Subject对象,让观察者自行操作
* 推模式:Subject知道Observer所需要的数据,只传入相应参数
*/
void update(Subject subject);
}
public class ConcreteObserver implements Observer{
@Override
public void update(Subject subject) {
System.out.println("观察者被调用了");
}
}
public class Subject {
/**
* 观察者
*/
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer){
this.observers.add(observer);
}
public void removeObserver(Observer observer){
this.observers.remove(observer);
}
public void notifyObservers(){
for (Observer observer: observers){
observer.update(this);
}
}
}
优点:
- 动态注册,动态联动
- 广播
- 需要注意循环广播的发生
近期评论